Spring Boot 整合多数据源
Spring Boot 大约 3653 字运行环境
Spring Boot 2.4.0
MySQL
Oracle
配置文件
注意:必须使用jdbc-url
,否则会报jdbcUrl is required with driverClassName
。
spring:
mysql:
datasource:
jdbc-url: jdbc:mysql://127.0.0.1:3306/test
username: testuser
password: testpwd
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 2
oracle:
datasource1:
jdbc-url: jdbc:oracle:thin:@//127.0.0.1:1521/orcl
username: testuser1
password: testpwd1
driver-class-name: oracle.jdbc.driver.OracleDriver
hikari:
maximum-pool-size: 2
datasource2:
jdbc-url: jdbc:oracle:thin:@//127.0.0.1:1521/orcl
username: testuser2
password: testpwd2
driver-class-name: oracle.jdbc.driver.OracleDriver
hikari:
maximum-pool-size: 2
配置类
须使用@Primary
标注主要数据源。
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "mysqlDatasource")
@ConfigurationProperties(prefix = "spring.mysql.datasource")
public DataSource mysqlDatasource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oracleDatasource1")
@ConfigurationProperties(prefix = "spring.oracle.datasource1")
public DataSource oracleDatasource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oracleDatasource2")
@ConfigurationProperties(prefix = "spring.oracle.datasource2")
public DataSource oracleDatasource2() {
return DataSourceBuilder.create().build();
}
@Bean(name = "mysqlJdbcTemplate")
public NamedParameterJdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDatasource") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
@Bean(name = "oracle1JdbcTemplate")
public NamedParameterJdbcTemplate oracle1JdbcTemplate(@Qualifier("oracleDatasource1") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
@Bean(name = "oracle2JdbcTemplate")
public NamedParameterJdbcTemplate oracle2JdbcTemplate(@Qualifier("oracleDatasource2") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
}
使用MySQL
@Service
public class MySQLService {
@Resource
@Qualifier("mysqlJdbcTemplate")
NamedParameterJdbcTemplate mysqlJdbcTemplate;
public List<MySQLInfo> query(Set<String> ids) {
Map<String, Set<String>> map = new HashMap<>();
map.put("ids", ids);
return mysqlJdbcTemplate.query("select id, name from info where id in (:ids)", map, BeanPropertyRowMapper.newInstance(MySQLInfo.class));
}
}
使用Oracle
Oracle
第一个数据库
@Service
public class Oracle1Service {
@Resource
@Qualifier("oracle1JdbcTemplate")
NamedParameterJdbcTemplate oracle1JdbcTemplate;
public List<Oracle1Info> query(Set<String> ids) {
Map<String, Set<String>> map = new HashMap<>();
map.put("ids", ids);
return oracle1JdbcTemplate.query("select user_name \"userName\", exter_info \"exterInfo\" from info where id in (:ids)", map, BeanPropertyRowMapper.newInstance(Oracle1Info.class));
}
}
Oracle
第二个数据库
@Service
public class Oracle2Service {
@Resource
@Qualifier("oracle2JdbcTemplate")
NamedParameterJdbcTemplate oracle2JdbcTemplate;
public List<Oracle2Info> queryUpstreamId(Set<Long> ids) {
Map<String, Set<Long>> map = new HashMap<>();
map.put("ids", ids);
return oracle2JdbcTemplate.query("select id, user_id \"userId\" from info2 where id in (ids)", map, BeanPropertyRowMapper.newInstance(Oracle2Info.class));
}
}
阅读 1296 · 发布于 2020-11-19
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Chrome 解决 CSDN 无法复制代码问题阅读 34
-
Kubernetes kubectl debug 调试无法 exec 进入的容器阅读 498
-
Java 遍历文件夹阅读 942
-
PHP 获取毫秒值时间戳阅读 3065
-
Windows 查看文件占用的几种方法阅读 3950
-
Spring Boot 启动后首次请求比较慢阅读 2226
-
Prometheus+Grafana+nginx-prometheus-exporter 监控 Nginx阅读 2565
-
Vue No module factory available for dependency type: CssDependency阅读 228
-
Spring Boot 3 record 作为配置类设置默认值阅读 169
-
MySQL 视图阅读 1863