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的自动配置。

最后更新于