java Spring boot如何配置多个数据源
我正在尝试使用Spring boot设置多个数据源(MySql、Postgres和Oracle)。我没有使用JPA。使用JdbcTemplate进行设置
我试过这样做
应用程序。属性
spring.datasource.test-oracle.username=test-oracle
spring.datasource.test-oracle.password=test-password
spring.datasource.test-oracle.url=dburl/test
spring.datasource.test-oracle.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.int-oracle.username=int-oracle
spring.datasource.int-oracle.password=int-password
spring.datasource.int-oracle.url=dburl/int
spring.datasource.int-oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.d.int-mysql.username=user
spring.datasource.d.int-mysql.password=password
spring.datasource.d.int-mysql.url=dburl/d
spring.datasource.d.int-mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.m.int-mysql.username=user
spring.datasource.m.int-mysql.password=password
spring.datasource.m.int-mysql.url=dburl/m
spring.datasource.m.int-mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.d.test-mysql.username=user
spring.datasource.d.test-mysql.password=password
spring.datasource.d.test-mysql.url=dburl/d
spring.datasource.d.test-mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.m.test-mysql.username=user
spring.datasource.m.test-mysql.password=password
spring.datasource.m.test-mysql.url=dburl/m
spring.datasource.m.test-mysql.driver-class-name=com.mysql.jdbc.Driver
MySqlConfiguration。java
@Configuration
public class MySqlConfiguration() {
@Bean(name = "dMySql")
@ConfigurationProperties(prefix = "spring.datasource.d.int-mysql")
public DataSource mysqlDrupalDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dJdbc")
public JdbcTemplate drupalJdbcTemplate(DataSource dMySql) {
return new JdbcTemplate(dMySql);
}
@Bean(name = "mMySql")
@ConfigurationProperties(prefix = "spring.datasource.m.int-mysql")
public DataSource mysqlDrupalDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "mJdbc")
public JdbcTemplate drupalJdbcTemplate(DataSource mMySql) {
return new JdbcTemplate(mMySql);
}
}
OracleConfiguration。java
@Configuration
public class OracleConfiguration {
@Primary
@Bean(name = "tOracle")
@ConfigurationProperties(prefix = "spring.datasource.test-oracle")
public DataSource heOracleDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "tOracleJdbc")
public JdbcTemplate jdbcTemplate(DataSource tOracle) {
return new JdbcTemplate(tOracle);
}
@Bean(name = "iOracle")
@ConfigurationProperties(prefix = "spring.datasource.int-oracle")
public DataSource heOracleDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "iOracleJdbc")
public JdbcTemplate jdbcTemplate(DataSource iOracle) {
return new JdbcTemplate(iOracle);
}
}
我不确定上述方法是否正确。当我按照引导文档使用@Primary时,总是使用带有@Primary的Bean。然后我在DAO实现中使用如下配置
DAO的实现之一
@Repository
public class DAOImpl implements DAOInterface {
@Autowired
@Qualifier("dJdbc")
private JdbcTemplate jdbc;
@Override
public Map<String, Object> getBasicStudentInfo(String MAIL) {
return jdbc.queryForMap(GET_BASIC_STUDENT_INFO, new Object[]{MAIL});
}
我该怎么做呢。?我确实看过很多关于多个数据源的文章,但不幸的是,这些例子或解决方案并不适合我
除此之外,我需要能够根据一些用户输入查询数据库。因此,如果用户提供了一个环境,例如“test”或“int”,那么如何根据该输入触发正确的属性呢
我知道Environment是@Autowired到Spring boot的,我可以拦截用户输入,但不确定应该如何提供用户输入和DAO配置之间的管道
如果有什么不清楚的地方,或者我需要更多的解释,或者需要更多的代码,我可以提供。如能帮助解决此问题,我们将不胜感激。谢谢
# 1 楼答案
在DAO中,可以连接其他JDBC模板。然后在运行时,您可以选择使用哪一个
# 2 楼答案
这是你问题的完整解决方案
您的配置类将如下所示:
MySqlConfiguration。java
OracleConfiguration。java
在DAO类中,可以像这样自动连接JdbcTemplate:
注意:确保用@Primary annotation注释其中一个数据源