这是承接上一篇MySQL和SQL server俩数据源配置
出于需求,在原来的基础上得再加个SQL server的数据源。
所以最后一共有MySQL数据源1个(使用Jpa),SQL server数据源2个(使用JdbcTemplate)
配置改动不大。
application.properties
#mysql数据源1
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.primary.username=abc
spring.datasource.primary.password=123456
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
#sql server 数据源2
spring.datasource.second.jdbc-url=jdbc:sqlserver://localhost:1433;database=DB2
spring.datasource.second.username=abc
spring.datasource.second.password=123456
spring.datasource.second.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#sql server 数据源3
spring.datasource.third.jdbc-url=jdbc:sqlserver://localhost:1433;database=DB3
spring.datasource.third.username=abc
spring.datasource.third.password=123456
spring.datasource.third.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
数据源配置类DataSourceConfig
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
/***
* 配置主数据源
* @return
*/
@Primary
@Bean
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 第2数据源
* @return
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 第3数据源
* @return
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.third")
public DataSource tertiaryDataSource() {
return DataSourceBuilder.create().build();
}
//第2数据源为SQL server,使用jdbcTemplate
@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
return new JdbcTemplate(secondaryDataSource);
}
//第3数据源为SQL server,使用jdbcTemplate
@Bean(name = "tertiaryJdbcTemplate")
public JdbcTemplate tertiaryJdbcTemplate(@Qualifier("tertiaryDataSource") DataSource tertiaryDataSource) {
return new JdbcTemplate(tertiaryDataSource);
}
}
主数据源就是使用Jpa的MySQL数据源,没有改动,保持前面的配置即可。
不清楚的可以参考上一篇Springboot同时使用MySQL和SQL server多数据源配置, 分别使用Jpa和JdbcTemplate
这里的第3数据源是新增的SQL server数据源,也是使用JdbcTemplate,和前面一样的配置。
但是!问题来了,当使用SQL server数据源的时候,发现无法正常注入JdbcTemplate。
问题代码如下:
@Autowired
private JdbcTemplate jdbcTemplate;
其实原因也很好理解,通俗点,就是JdbcTemplate现在管理着2个SQL server
数据源,但是像上面这样注入的时候,它不知道该使用哪个数据源。
所以在注入时,要指定注册了对应数据源的JdbcTemplate的BeanName,如下:
@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate jdbcTemplate;