如何将Spring Authorization Server数据源替换为PostgreSQL?
适配PostgreSQL数据库的配置改动步骤
1. 移除嵌入式数据库相关代码
删除EmbeddedDatabase、EmbeddedDatabaseBuilder、EmbeddedDatabaseType的导入语句,同时删除原有的embeddedDatabase() Bean方法,不再依赖嵌入式H2数据库。
2. 添加PostgreSQL驱动依赖
根据你的构建工具引入PostgreSQL驱动:
- Maven(在
pom.xml中添加):
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency>
- Gradle(在
build.gradle中添加):
runtimeOnly 'org.postgresql:postgresql'
3. 配置PostgreSQL数据源
替换嵌入式数据源为PostgreSQL专用数据源,生产环境推荐使用性能更优的HikariDataSource,示例代码如下:
import com.zaxxer.hikari.HikariDataSource; import javax.sql.DataSource; @Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName("org.postgresql.Driver"); // 替换为你的PostgreSQL实际连接信息 dataSource.setJdbcUrl("jdbc:postgresql://localhost:5432/your_db_name"); dataSource.setUsername("your_db_username"); dataSource.setPassword("your_db_password"); // 可选:配置连接池参数 dataSource.setMaximumPoolSize(10); dataSource.setConnectionTimeout(30000); return dataSource; }
若不需要连接池,也可使用DriverManagerDataSource,但不建议用于生产环境。
4. 初始化数据库表结构
Spring Authorization Server提供了标准表结构脚本,需将其执行到PostgreSQL数据库中:
- 可通过配置类上的
@Sql注解自动执行脚本:
import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration; import org.springframework.sql.init.Sql; @Configuration @Order(1) @Sql({ "classpath:org/springframework/security/oauth2/server/authorization/oauth2-authorization-schema.sql", "classpath:org/springframework/security/oauth2/server/authorization/oauth2-authorization-consent-schema.sql", "classpath:org/springframework/security/oauth2/server/authorization/client/oauth2-registered-client-schema.sql" }) public class AuthorizationServerConfig extends OAuth2AuthorizationServerConfiguration { // 其他授权服务配置... }
- 注意:需提前在PostgreSQL中手动创建好对应数据库(即上述
your_db_name),否则脚本执行会失败。
5. 配置JdbcTemplate(按需)
若业务需要使用JdbcTemplate,添加对应的Bean即可:
import org.springframework.jdbc.core.JdbcTemplate; @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); }
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

