博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring boot 连接多数据源
阅读量:6888 次
发布时间:2019-06-27

本文共 7292 字,大约阅读时间需要 24 分钟。

1.application.yml中添加两个datasource

server:  port: 8080spring:  application:    name: king  datasource:    master:      type: com.zaxxer.hikari.HikariDataSource      jdbc-url: jdbc:mysql://localhost:3306/shengong?useUnicode=yes&characterEncoding=UTF-8&serverTimezone=UTC      driver-class-name: com.mysql.cj.jdbc.Driver      username: root      password: arongking      idle-timeout: 10000      minimum-idle: 1      maximum-pool-size: 10      pool-name: master      auto-commit: false      connection-test-query: SELECT 1    slave:      type: com.zaxxer.hikari.HikariDataSource      jdbc-url: jdbc:mysql://localhost:3306/king?useUnicode=yes&characterEncoding=UTF-8&serverTimezone=UTC      driver-class-name: com.mysql.cj.jdbc.Driver      username: root      password: arongking      idle-timeout: 10000      minimum-idle: 1      maximum-pool-size: 10      pool-name: slave      auto-commit: false      connection-test-query: SELECT 1
2.手动初始化数据源masterDataSource
package cn.bj.king.config;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;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.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;/*** @author ARongking* @date 2019-03-28*/@Configuration@EnableTransactionManagement@MapperScan(basePackages = {"cn.bj.king.mapper.master"},        sqlSessionFactoryRef = "masterSqlSessionFactory")public class WriteDataSourceConfig {    @Bean(name = "masterDataSource")    @Primary    @Qualifier("masterDataSource")    public DataSource masterDataSource(@Qualifier("masterHikariConfig")HikariConfig hikariConfig) {        System.out.println("实例化主库");        HikariDataSource hikariDataSource=new HikariDataSource(hikariConfig);        return hikariDataSource;    }    /**    * 配置连接池信息    * @return    */    @ConfigurationProperties(prefix = "spring.datasource.master")    @Bean("masterHikariConfig")    public HikariConfig masterHikariConfig(){        HikariConfig hikariConfig=new HikariConfig();        return hikariConfig;    }    /**     * SqlSessionFactory配置     *     * @return     * @throws Exception     */    @Bean(name = "masterSqlSessionFactory")    @Primary    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        sqlSessionFactoryBean.setDataSource(dataSource);        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        // 配置mapper文件位置        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/master/*.xml"));        sqlSessionFactoryBean.setTypeAliasesPackage("cn.bj.king.entity");        return sqlSessionFactoryBean.getObject();    }    /**     * 配置事物管理器     *     * @return     */    @Bean(name = "masterTransactionManager")    @Primary    public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();        dataSourceTransactionManager.setDataSource(dataSource);        return dataSourceTransactionManager;    }}
3.手动初始化数据源ReadDataSource
package cn.bj.king.config;import com.github.pagehelper.PageInterceptor;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;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.core.env.Environment;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;import java.util.Properties;@Configuration@EnableTransactionManagement@MapperScan(basePackages = {"cn.bj.king.mapper.slave"},        sqlSessionFactoryRef = "slaveSqlSessionFactory")public class ReadDataSourceConfig {    @Autowired    Environment environment;    @Bean(name = "slaveDataSource")    @Qualifier("slaveDataSource")    public DataSource slaveDataSource(@Qualifier("slaveHikariConfig")HikariConfig hikariConfig) {        System.out.println("实例化从库");        HikariDataSource hikariDataSource=new HikariDataSource(hikariConfig);        return hikariDataSource;    }    /**     * 配置连接池信息     * @return     */    @ConfigurationProperties(prefix = "spring.datasource.slave")    @Bean("slaveHikariConfig")    public HikariConfig slaveHikariConfig(){        HikariConfig hikariConfig=new HikariConfig();        return hikariConfig;    }    /**     * SqlSessionFactory配置     *     * @return     * @throws Exception     */    @Bean(name = "slaveSqlSessionFactory")    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        sqlSessionFactoryBean.setDataSource(dataSource);        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        // 配置mapper文件位置        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/slave/*.xml"));        sqlSessionFactoryBean.setTypeAliasesPackage("cn.bj.king.entity");        return sqlSessionFactoryBean.getObject();    }    /**     * 配置事物管理器     *     * @return     */    @Bean(name = "slaveTransactionManager")    public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();        dataSourceTransactionManager.setDataSource(dataSource);        return dataSourceTransactionManager;    }}
4.测试启动是否正常初始化master和slave 两个数据源5.这里需要注意几个地方:    * 配置数据库连接池的时候,如果不是手动设置HikariConfig ,即通过Environment 去一个个获取数据库连接池在yml中的配置的话,数据库连接池的(idle-timeout,minimum-idle, maximum-pool-size,pool-name,auto-commit,connection-test-query)等,一定要与slave节点平级,不然 HikariConfig 是读取不到这些信息的。    * 如果手动赋值HikariConfig 的话,那就没有什么限制了,写到哪里都行,只需要用Environment  去读取配置文件的值,手动设置到HikariConfig 就行了。

转载于:https://blog.51cto.com/longithome/2400459

你可能感兴趣的文章
sql多表查询语句与方法
查看>>
Linux命令行下抓包工具tcpdump的使用
查看>>
PL/Python PostgreSQL 存储过程语言(花架子)
查看>>
试用Facebook的WDT
查看>>
我的友情链接
查看>>
虚拟交换系统 (VSS)
查看>>
利用bat,vb实现根据日期自动备份文件
查看>>
解决安装win8.1后在ubuntu下无法正常挂载ntfs分区
查看>>
全栈工程师会是未来的发展趋势吗?
查看>>
imacros:初次尝试
查看>>
清空用户下所有对象
查看>>
MySQL/MariaDB的日志
查看>>
Unity3d Textrue属性
查看>>
Netty(四)——线程模型
查看>>
Linux查看硬盘、内存
查看>>
Redis设置密码
查看>>
python简介
查看>>
C#中将DataGridView中数据导出至Excel
查看>>
我的友情链接
查看>>
性能优化之Java(Android)代码优化
查看>>