自己学习,参考了网上许多文章
测试环境 springboot2.7.1+maven-3.8.5+mysql8
pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.yml 配置,
(DataSource配置使用DruidDataSourceBuilder时,jdbc-url改为url)
spring:
datasource:
one:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.1.11:3306/mydb1?serverTimezone=Asia/Shanghai&useUnicode=true@characterEncoding=utf-8
username: root
password: root
two:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.1.12:3306/mydb2?serverTimezone=Asia/Shanghai&useUnicode=true@characterEncoding=utf-8
username: root
password: root
多数据源的支持:
DataSource配置
@Configuration
public class DataSourceConfig {
@Primary
@Bean
@ConfigurationProperties("spring.datasource.one")
public DataSource dataSourceOne(){
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.two")
public DataSource dataSourceTwo(){
return DataSourceBuilder.create().build();
}
}
JdbcTemplate配置
@Configuration
public class JdbcTemplateConfig {
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dataSourceOne") DataSource dsOne) {
return new JdbcTemplate(dsOne);
}
@Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("dataSourceTwo") DataSource dsTwo) {
return new JdbcTemplate(dsTwo);
}
}
测试:
@SpringBootTest
class SpringbootMultApplicationTests {
@Autowired
@Qualifier("jdbcTemplateOne")
JdbcTemplate jdbcTemplateOne;
@Resource(name = "jdbcTemplateTwo")
JdbcTemplate jdbcTemplateTwo;
@Test
void contextLoads() {
String sql = "SELECT COUNT(1) FROM dept" ;
String sql2 = "SELECT COUNT(1) FROM emp" ;
Integer countOne = jdbcTemplateOne.queryForObject(sql,Integer.class) ;
Integer countTwo = jdbcTemplateTwo.queryForObject(sql2,Integer.class) ;
System.out.println("查询数据源1合计:"+countOne);
System.out.println("查询数据源2合计:"+countTwo);
}
}
参考:Spring Boot配置JdbcTemplate之多数据源https://blog.csdn.net/liuzuoping/article/details/105845599