SpringBoot实现多数据源

Springboot实现多数据源

技术栈:springboot+mysql+mybatis

1、配置Maven:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.3.2</version>
</dependency>

2、配置application.properties

## master
master.datasource.url=jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=utf8
master.datasource.username=root
master.datasource.password=082900
master.datasource.driverClassName=com.mysql.jdbc.Driver

## cluster
cluster.datasource.url=jdbc:mysql://localhost:3306/slave?useUnicode=true&characterEncoding=utf8
cluster.datasource.username=root
cluster.datasource.password=082900
cluster.datasource.driverClassName=com.mysql.jdbc.Driver

3、加载配置

下面是master数据源对应的配置,cluster同理。

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {

    // 精确到 master 目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.example.demo.gmg.mapper.master";
    static final String MAPPER_LOCATION = "classpath:com/gmg/master/*.xml";

    @Value("${master.datasource.url}")
    private String url;

    @Value("${master.datasource.username}")
    private String user;

    @Value("${master.datasource.password}")
    private String password;

    @Value("${master.datasource.driverClassName}")
    private String driverClass;

    @Bean(name = "masterDataSource")
    @Primary
    public DataSource masterDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

4、编写业务逻辑

代码结构如下图:

具体的代码逻辑不再赘述,源代码地址【https://github.com/gmg0829/SpringbootLearningExample/tree/master/Springboot-MultiDataSource】

本文分享自微信公众号 - 分母为零(gmg1014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏怀英的自我修炼

《Spring实战》摘录 - 20

问题:#11.2.1-4 | Hibernate的JPA适配器支持多种数据库,可以通过其database属性配置使用哪个数据库

13730
来自专栏用户1337634的专栏

Spring Boot缓存配置不同到期时间

这种方式可以实现不同缓存的不同到期时间,但是后面再新增缓存数据的话,都需要再在CacheManager中配置

95920
来自专栏weixuqin 的专栏

Spring 容器中 Bean 的生命周期

Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 spring 可以在创建和拆卸 bean 的时候调用 bean 的两个生命周...

15130
来自专栏秃头哥编程

Redis常用技术-----使用Lua语言

Redis命令的计算能力并不算很强大,使用Lua语言则可以在很大程度上弥补Redis的这个不足。在Redis中,执行Lua语言是原子性,也就是说Redis执行L...

13020
来自专栏A周立SpringCloud

Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

可以看到 userMapper 下有个红色警告。虽然代码本身并没有问题,能正常运行,但有个警告总归有点恶心。本文分析原因,并列出解决该警告的几种方案。

23710
来自专栏前沿技墅

响应式微服务架构设计

使用微服务架构最关键的一个原则就是将系统划分成一个个相互隔离、无依赖的微服务,这些微服务通过定义良好的协议进行通信。而响应式微服务架构,又有其独特的设计原则和理...

19930
来自专栏JMCui

服务监控之spring-boot-admin

 开始阅读这篇文章之前,建议先阅读下《SpringBoot 之Actuator》,该篇文章提到 Spring Boot Actuator 提供了对单个Sprin...

36230
来自专栏weixuqin 的专栏

Spring 的 Bean 管理(XML 方式)

这里不再做具体的演示说明,相关代码我已经上传 github,可以访问下面链接参考:

14630
来自专栏Java架构师学习

关于Spring Boot你不得不知道的事

2 Spring Boot和Spring MVC 试想一下使用Spring或者Spring MVC的经历,有哪些痛苦?

9020
来自专栏用户5362821的专栏

那些年,我们追过的“定时调度”

定时调度 作为MadPecker的后端开发人员,我们总会遇到这样的业务场景:每周同步一批数据;每半个小时检查一遍服务器运行状况;每天早上八点给用户发送一份包含今...

15830

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励