79.2 Configure Two DataSources
79.2 配置两个数据源
如果你需要配置多个数据源,你可以应用上一节描述的技巧。但是,你必须把其中的一个数据源
标注为@Primary
,因为之后有各种不同的自动配置,至少需要通过类型得到一个。
如果你创建了你自己的数据源
,自动配置将会后退。在下面的例子中,我们提供完全相同的特性,而不是自动配置提供的主要的数据源:
@Bean
@Primary
@ConfigurationProperties("app.datasource.first")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.first")
public DataSource firstDataSource() {
return firstDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties("app.datasource.second")
public BasicDataSource secondDataSource() {
return DataSourceBuilder.create().type(BasicDataSource.class).build();
}
提示 firstDataSourceProperties
必须被标记为@Primary
。这样,数据库初始化器特性会使用你的拷贝(如果你使用初始化器)。
两个数据源也都绑定到了高级的自定义。例如你应当如下配置它们:
app.datasource.first.type=com.zaxxer.hikari.HikariDataSource
app.datasource.first.maximum-pool-size=30
app.datasource.second.url=jdbc:mysql://localhost/test
app.datasource.second.username=dbuser
app.datasource.second.password=dbpass
app.datasource.second.max-total=30
你也可以应用相同的观念到第二个数据源
:
@Bean
@Primary
@ConfigurationProperties("app.datasource.first")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.first")
public DataSource firstDataSource() {
return firstDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties("app.datasource.second")
public DataSourceProperties secondDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("app.datasource.second")
public DataSource secondDataSource() {
return secondDataSourceProperties().initializeDataSourceBuilder().build();
}
这个最后的例子用相同的逻辑,在自定义的命名空间配置了两个数据源,而没有使用Spring Boot的自动配置。