为什么在 Spring 中构建 DataSource 需要 @ConfigurationProperties?
Why is @ConfigurationProperties needed in building a DataSource in Spring?
如果@ConfigurationProperties将属性绑定到一个对象中,@ConfigurationProperties在构建DataSource时有什么用?
application.properties
#Database
database1.datasource.url=jdbc:mysql://localhost/testdb
database1.datasource.username=root
database1.datasource.password=root
database1.datasource.driver-class-name=com.mysql.jdbc.Driver
数据源 Bean:
@Bean(name = "datasource1")
@ConfigurationProperties("database1.datasource")
@Primary
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
此外,如果数据源属性已经在单独的 bean 中使用 @ConfigurationProperties 绑定,我们是否还需要将相同的注释放在数据源构建器 bean 中?
@Bean
@ConfigurationProperties("database1.datasource")
public DataSourceProps dataSourceProps(){
return new DataSourceProps();
}
@Bean(name = "datasource1")
// @ConfigurationProperties("database1.datasource") Is this necessary?
@Primary
public DataSource dataSource(){
return dataSourceProps().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
不,您不需要将 @ConfigurationProperties("database1.datasource")
放在第二个 bean 上。它不会服务于任何目的。但是,如果您将 @ConfigurationProperties("database1.datasource.hikari")
放在第二个 bean 上,它将配置您的 HikariDataSource。例如,您有一个类似于
的属性文件
mysql.datasource.url=jdbc:mysql://localhost:3306/test
mysql.datasource.username=root
mysql.datasource.password=password
mysql.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mysql.datasource.hikari.minimum-idle=3
mysql.datasource.hikari.maximum-pool-size=8
你的配置就像
@Bean
@ConfigurationProperties("mysql.datasource")
public DataSourceProperties mysqlDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("mysql.datasource.hikari")
public DataSource mysqlDataSource() {
return mysqlDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
第一个 bean 使用数据库 url、用户名和密码创建一个 DataSourceProperties,它们由 mysql.datasource.*
提供。如果你不添加 @ConfigurationProperties("mysql.datasource.hikari")
spring 将使用默认值配置 hikari 数据连接池,你将无法通过更改 属性 文件来更改它们。所以两个配置属性服务器有两个不同的用途。
如果@ConfigurationProperties将属性绑定到一个对象中,@ConfigurationProperties在构建DataSource时有什么用?
application.properties
#Database
database1.datasource.url=jdbc:mysql://localhost/testdb
database1.datasource.username=root
database1.datasource.password=root
database1.datasource.driver-class-name=com.mysql.jdbc.Driver
数据源 Bean:
@Bean(name = "datasource1")
@ConfigurationProperties("database1.datasource")
@Primary
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
此外,如果数据源属性已经在单独的 bean 中使用 @ConfigurationProperties 绑定,我们是否还需要将相同的注释放在数据源构建器 bean 中?
@Bean
@ConfigurationProperties("database1.datasource")
public DataSourceProps dataSourceProps(){
return new DataSourceProps();
}
@Bean(name = "datasource1")
// @ConfigurationProperties("database1.datasource") Is this necessary?
@Primary
public DataSource dataSource(){
return dataSourceProps().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
不,您不需要将 @ConfigurationProperties("database1.datasource")
放在第二个 bean 上。它不会服务于任何目的。但是,如果您将 @ConfigurationProperties("database1.datasource.hikari")
放在第二个 bean 上,它将配置您的 HikariDataSource。例如,您有一个类似于
mysql.datasource.url=jdbc:mysql://localhost:3306/test
mysql.datasource.username=root
mysql.datasource.password=password
mysql.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mysql.datasource.hikari.minimum-idle=3
mysql.datasource.hikari.maximum-pool-size=8
你的配置就像
@Bean
@ConfigurationProperties("mysql.datasource")
public DataSourceProperties mysqlDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("mysql.datasource.hikari")
public DataSource mysqlDataSource() {
return mysqlDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
第一个 bean 使用数据库 url、用户名和密码创建一个 DataSourceProperties,它们由 mysql.datasource.*
提供。如果你不添加 @ConfigurationProperties("mysql.datasource.hikari")
spring 将使用默认值配置 hikari 数据连接池,你将无法通过更改 属性 文件来更改它们。所以两个配置属性服务器有两个不同的用途。