Hello你们好,本章咱们配置多数据源功能 。有问题能够联系我mr_beany@163.com。另求各路大神指点,感谢
修改application.propertieshtml
spring.datasource.db1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.db1.url=jdbc:mysql://localhost:3333/demo?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&failOverReadOnly=false
spring.datasource.db1.username=root
spring.datasource.db1.password=123456
spring.datasource.db1.initialSize=5
spring.datasource.db1.minIdle=5
spring.datasource.db1.maxActive=20
#链接等待超时时间
spring.datasource.db1.maxWait=60000
#配置隔多久进行一次检测(检测能够关闭的空闲链接)
spring.datasource.db1.timeBetweenEvictionRunsMillis=60000
#配置链接在池中的最小生存时间
spring.datasource.db1.minEvictableIdleTimeMillis=300000
spring.datasource.db1.validationQuery=SELECT 1 FROM DUAL
spring.datasource.db1.testWhileIdle=true
spring.datasource.db1.testOnBorrow=false
spring.datasource.db1.testOnReturn=false
# 打开PSCache,而且指定每一个链接上PSCache的大小
spring.datasource.db1.poolPreparedStatements=true
spring.datasource.db1.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql没法统计,'wall'用于防火墙
spring.datasource.db1.filters=stat,wall,slf4j
# 经过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.db1.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.db2.url=jdbc:mysql://localhost:3306/chuchen?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&failOverReadOnly=false
spring.datasource.db2.username=root
spring.datasource.db2.password=123456
spring.datasource.db2.initialSize=5
spring.datasource.db2.minIdle=5
spring.datasource.db2.maxActive=20
#链接等待超时时间
spring.datasource.db2.maxWait=60000
#配置隔多久进行一次检测(检测能够关闭的空闲链接)
spring.datasource.db2.timeBetweenEvictionRunsMillis=60000
#配置链接在池中的最小生存时间
spring.datasource.db2.minEvictableIdleTimeMillis=300000
spring.datasource.db2.validationQuery=SELECT 1 FROM DUAL
spring.datasource.db2.testWhileIdle=true
spring.datasource.db2.testOnBorrow=false
spring.datasource.db2.testOnReturn=false
# 打开PSCache,而且指定每一个链接上PSCache的大小
spring.datasource.db2.poolPreparedStatements=true
spring.datasource.db2.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql没法统计,'wall'用于防火墙
spring.datasource.db2.filters=stat,wall,slf4j
# 经过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.db2.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000复制代码
注意修改成本身的数据库链接java
MysqlDataSource1Config
mysql
package com.example.demo.core.configurer.dataSource;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = {"com.example.demo.dao.db1"})
public class MysqlDataSource1Config {
@Bean(name = "primaryDataSource")
//需设置主数据源
@Primary
@ConfigurationProperties(prefix="spring.datasource.db1")
public DataSource dataSource(){
//跟以前不同了
return new DruidDataSource();
}
@Bean(name = "primaryTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean(name="primarySqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource")DataSource primaryDataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(primaryDataSource);
Resource[] mapperLocations = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml");
sessionFactory.setMapperLocations(mapperLocations);
return sessionFactory.getObject();
}
}
复制代码
MysqlDataSource2Config
git
package com.example.demo.core.configurer.dataSource;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.example.demo.dao.db2"}, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class MysqlDataSource2Config {
@Bean(name = "secondDataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource dataSource() {
return new DruidDataSource();
}
@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
Resource[] mapperLocations = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml");
sessionFactory.setMapperLocations(mapperLocations);
return sessionFactory.getObject();
}
}复制代码
目录结构以下图,db1为主数据源,db2为从数据源,这样根据访问dao层不一样,会自动进行数据源切换github
输入http://localhost:8080/userInfo/selectAll
spring
结果:sql
{
"code": 200,
"data": {
....省略
"list": [
{
"id": "1",
"userName": "Mr_初晨"
},
{
"id": "2",
"userName": "Mr_初晨"
}
],
.....省略
},
"msg": "success"
}复制代码
输入http://localhost:8080/userLabel/list
数据库
结果:apache
{
"code": 200,
"data": {
....省略
"list": [
{
"createTime": 1523283547000,
"id": "24084baed3c6409a8619a635bf4428a1",
"labelId": "4",
"userId": "1"
}
],
.....省略
},
"msg": "success"
}复制代码
输入http://localhost:8080/druid/datasource.html
bash
也能够看见有两个数据源
码云地址: gitee.com/beany/mySpr…
GitHub地址: github.com/MyBeany/myS…
写文章不易,如对您有帮助,请帮忙点下star
配置多数据源功能已完成,后续功能接下来陆续更新,有问题能够联系我mr_beany@163.com。另求各路大神指点,感谢你们。