Spring项目启动执行SQL脚本:OAuth2授权服务数据库初始化方法
方法一:通过Spring DataSourceInitializer自动执行脚本
这是最贴合你原有嵌入式数据库配置思路的方案,直接替换数据源并加载官方脚本执行。
1. 配置依赖与数据源
首先在pom.xml中添加MySQL驱动和Spring JDBC依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
在application.yml中配置本地MySQL数据源:
spring: datasource: url: jdbc:mysql://localhost:3306/oauth2_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: root password: very_secure driver-class-name: com.mysql.cj.jdbc.Driver
注意:提前在MySQL中创建
oauth2_db数据库,执行CREATE DATABASE oauth2_db;即可。
2. 配置脚本执行Bean
创建配置类,通过DataSourceInitializer加载官方SQL脚本并执行:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import javax.sql.DataSource; @Configuration public class OAuth2DatabaseConfig { @Bean public DataSourceInitializer dataSourceInitializer(DataSource dataSource) { DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); // 加载Spring Authorization Server官方提供的三个表结构脚本 populator.addScript(new ClassPathResource("org/springframework/security/oauth2/server/authorization/oauth2-authorization-schema.sql")); populator.addScript(new ClassPathResource("org/springframework/security/oauth2/server/authorization/oauth2-authorization-consent-schema.sql")); populator.addScript(new ClassPathResource("org/springframework/security/oauth2/server/authorization/client/oauth2-registered-client-schema.sql")); populator.setSqlScriptEncoding("UTF-8"); initializer.setDatabasePopulator(populator); return initializer; } }
官方脚本基本兼容MySQL,无需额外修改;若遇到语法报错,可将脚本中的
BLOB替换为MySQL的LONGBLOB,TIMESTAMP保持不变即可。
方法二:手动执行脚本(适合调试或生产环境)
如果不想通过代码自动执行,可直接手动操作:
- 从Spring Security OAuth2的jar包中提取三个SQL脚本,或直接复制官方脚本内容
- 用MySQL客户端(命令行、Navicat等)连接到
localhost:3306的oauth2_db数据库 - 依次执行三个脚本,完成表结构初始化
方法三:用Flyway做版本化管理(推荐生产环境)
若需要对数据库变更做版本控制,可使用Flyway:
- 添加Flyway依赖:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
- 在
src/main/resources/db/migration目录下创建V1__init_oauth2_tables.sql,将三个官方脚本的内容合并到该文件中(适配MySQL语法) - 启动应用时,Flyway会自动检测并执行该脚本,完成表初始化
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

