可以是mysql,oracle等多种不同数据源
项目结构
注意:只有@Primary的数据源所控制的mapper文件加注解@Mapper,否则mybatis无法切换扫描;即本文中的mapper/opener文件夹下mapper加注解
1、pom
驱动之外加入druid和mybatis等pom,整合mybatis自行搜索
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
2、properties配置
################## JDBC 配置 ################
#资讯数据库一配置
spring.datasource.druid.opener.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.druid.opener.url=jdbc:oracle:thin:@127.0.0.1:1521:wljrdb
spring.datasource.druid.opener.username=opener
spring.datasource.druid.opener.password=123456
#舆情数据库二配置
spring.datasource.druid.yq.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.druid.yq.url=jdbc:oracle:thin:@127.0.0.1:1521:wljrdb
spring.datasource.druid.yq.username=YQ
spring.datasource.druid.yq.password=123456
#f10数据库二配置
spring.datasource.druid.f10.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.f10.url=jdbc:mysql://127.0.0.1:3306/iwin-f10?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
spring.datasource.druid.f10.username=root
spring.datasource.druid.f10.password=123456
########################## druid配置 ##########################
# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大
################## 连接池配置 ################
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=30000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.validation-query-timeout=30000
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,wall,log4j2
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 监控中心 如果设置了StatViewServlet,即配置了监控池认证,
# 要进监控池需要输入http://127.0.0.1:8083/druid/login.html,如果没配置,直接输入http://127.0.0.1:8083/druid/即可
spring.datasource.druid.stat-view-servlet.enabled= true
spring.datasource.druid.stat-view-servlet.url-pattern= /druid
@Configuration
public class MultiDataSourceConfig {
private final static Logger logger = LoggerFactory.getLogger(MultiDataSourceConfig.class);
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.druid.opener")
public DataSource openerDataSource(){
logger.info("opener数据源初始化。。。");
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid.yq")
public DataSource yqDataSource(){
logger.info("YQ数据源初始化。。。");
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid.f10")
public DataSource f10DataSource(){
logger.info("f10数据源初始化。。。");
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
public SqlSessionFactory openerSqlSessionFactory(@Qualifier("openerDataSource")DataSource openerDataSource) throws Exception{
SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
fb.setDataSource(openerDataSource);
fb.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/opener/*.xml")
);
return fb.getObject();
}
@Bean
public SqlSessionFactory yqSqlSessionFactory(@Qualifier("yqDataSource")DataSource yqDataSource) throws Exception{
SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
fb.setDataSource(yqDataSource);
fb.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/yq/*.xml")
);
return fb.getObject();
}
@Bean
public SqlSessionFactory f10SqlSessionFactory(@Qualifier("f10DataSource")DataSource f10DataSource) throws Exception{
SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
fb.setDataSource(f10DataSource);
fb.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:/mybatis/f10/*.xml")
);
return fb.getObject();
}
@Bean(name="openerMapperScannerConfigurer")
@Primary
public MapperScannerConfigurer openerMapperScannerConfigurer(){
MapperScannerConfigurer configurer = new MapperScannerConfigurer();
configurer.setSqlSessionFactoryBeanName("openerSqlSessionFactory");
configurer.setBasePackage("com.cfzq.lz.mapper.opener");
return configurer;
}
@Bean(name="yqMapperScannerConfigurer")
public MapperScannerConfigurer yqMapperScannerConfigurer(){
MapperScannerConfigurer configurer = new MapperScannerConfigurer();
configurer.setSqlSessionFactoryBeanName("yqSqlSessionFactory");
configurer.setBasePackage("com.cfzq.lz.mapper.yq");
return configurer;
}
@Bean(name="f10MapperScannerConfigurer")
public MapperScannerConfigurer f10MapperScannerConfigurer(){
MapperScannerConfigurer configurer = new MapperScannerConfigurer();
configurer.setSqlSessionFactoryBeanName("f10SqlSessionFactory");
configurer.setBasePackage("com.cfzq.lz.mapper.f10");
return configurer;
}
@Bean(name="openerTransactionManager")
@Primary
public DataSourceTransactionManager openerTransactionManager(@Qualifier("openerDataSource")DataSource openerDataSource) throws Exception{
return new DataSourceTransactionManager(openerDataSource);
}
@Bean(name="yqTransactionManager")
public DataSourceTransactionManager yqTransactionManager(@Qualifier("yqDataSource")DataSource yqDataSource) throws Exception{
return new DataSourceTransactionManager(yqDataSource);
}
@Bean(name="f10TransactionManager")
public DataSourceTransactionManager f10TransactionManager(@Qualifier("f10DataSource")DataSource f10DataSource) throws Exception{
return new DataSourceTransactionManager(f10DataSource);
}
}
代码调用
很简单,使用哪个数据源service注入哪个mapper就可以了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。