Spring Boot集成Jooq场景下修改数据源配置属性名的方法
自定义Spring Boot数据源配置前缀适配方案
针对你想把默认的spring.datasource前缀改成datasource.postgresql的需求,我给你整理了一套完整的操作步骤,亲测有效:
1. 修改application.properties配置
首先把原来的数据库配置项前缀替换成你想要的,新的配置内容如下:
datasource.postgresql.driverClassName=org.postgresql.Driver datasource.postgresql.url=jdbc:postgresql://localhost:5432/springbootdb datasource.postgresql.username=postgres datasource.postgresql.password=postgres@123
2. 创建属性绑定类
因为Spring Boot默认只会自动绑定spring.datasource开头的属性,所以我们需要自定义一个类来绑定新前缀下的配置项,这样代码里就能方便地读取这些值:
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "datasource.postgresql") public class PostgresDataSourceProperties { private String driverClassName; private String url; private String username; private String password; // 记得生成所有属性的getter和setter方法 public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
3. 手动配置DataSource Bean
接下来需要创建一个配置类,利用上面的属性类来实例化自定义的DataSource,替代Spring Boot的自动配置:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration public class DataSourceConfig { private final PostgresDataSourceProperties dataSourceProperties; // 通过构造函数注入属性类(Spring 4.3+支持无需@Autowired) public DataSourceConfig(PostgresDataSourceProperties dataSourceProperties) { this.dataSourceProperties = dataSourceProperties; } @Bean public DataSource postgresDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(dataSourceProperties.getDriverClassName()); dataSource.setUrl(dataSourceProperties.getUrl()); dataSource.setUsername(dataSourceProperties.getUsername()); dataSource.setPassword(dataSourceProperties.getPassword()); return dataSource; } }
4. 确保jOOQ使用自定义数据源
因为你集成了jOOQ,需要保证它能正确使用我们刚创建的DataSource。如果你的项目里只有这一个DataSource Bean,Spring会自动把它注入给jOOQ的自动配置;如果有多个数据源,记得给这个Bean加上@Primary注解,或者手动配置jOOQ的DSLContext:
import org.jooq.DSLContext; import org.jooq.impl.DSL; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class JooqConfig { private final DataSource postgresDataSource; public JooqConfig(DataSource postgresDataSource) { this.postgresDataSource = postgresDataSource; } @Bean public DSLContext dslContext() { return DSL.using(postgresDataSource); } }
5. 排除默认数据源自动配置(可选但推荐)
为了避免Spring Boot自动创建默认的DataSource导致冲突,建议在你的Spring Boot启动类上排除DataSourceAutoConfiguration:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
做完这些步骤后,启动应用就能正常使用自定义前缀的数据库配置了,jOOQ也会正常连接到你的PostgreSQL数据库。
内容的提问来源于stack exchange,提问作者usr_11
相关产品推荐
相关产品推荐

