You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目启动执行SQL脚本:OAuth2授权服务数据库初始化方法

在本地MySQL中初始化Spring Authorization Server数据库表

方法一:通过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保持不变即可。


方法二:手动执行脚本(适合调试或生产环境)

如果不想通过代码自动执行,可直接手动操作:

  1. 从Spring Security OAuth2的jar包中提取三个SQL脚本,或直接复制官方脚本内容
  2. 用MySQL客户端(命令行、Navicat等)连接到localhost:3306的oauth2_db数据库
  3. 依次执行三个脚本,完成表结构初始化

方法三:用Flyway做版本化管理(推荐生产环境)

若需要对数据库变更做版本控制,可使用Flyway:

  1. 添加Flyway依赖:
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>
  1. 在src/main/resources/db/migration目录下创建V1__init_oauth2_tables.sql,将三个官方脚本的内容合并到该文件中(适配MySQL语法)
  2. 启动应用时,Flyway会自动检测并执行该脚本,完成表初始化

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:01:08