zoukankan      html  css  js  c++  java
  • springboot整合mybatis+mysql+druid 多个数据源

    springboot+mybatis+druid 多数据源

    1. 创建maven项目,引入依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.5</version> <!--低版本可以解决mybatis不支持LocalDateTime问题-->
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <!--druid数据源 start-->
            <!--配置druid多数据源时,要使用druid-spring-boot-starter包,否则会报错
              java: 程序包com.alibaba.druid.spring.boot.autoconfigure不存在
            -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.22</version>
            </dependency>
            <!--druid数据源 end-->
    

    2. 配置多数据源

    1. 配置数据库连接 application.yml
    spring:
      datasource:
        # 数据源1
        url: jdbc:mysql://****:3306/dataSourceManagement?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        #数据源2
        icp:
          url: jdbc:mysql://****:3306/icp_rule?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
          username: root
          password: root
          type: com.alibaba.druid.pool.DruidDataSource
    
    1. 数据源配置类(druid配置,mybatis配置),通过@MapperScan(basePackages = "com.example.datasource.mapper",sqlSessionTemplateRef = "primarySqlSessionTemplate")注解将数据源与mapper文件对应

      1. 数据源1配置类
      @Configuration
      @MapperScan(basePackages = "com.example.datasource.mapper",sqlSessionTemplateRef = "primarySqlSessionTemplate")
      public class PrimaryDataSourceConfig {
      
          /**
          * 数据源配置
          *
          * @return
          */
          @Bean
          @ConfigurationProperties(prefix = "spring.datasource")
          DataSource primaryDs() {
              // 如果使用 druid 作为连接池,则需要使用DruidDataSourceBuilder
              return DruidDataSourceBuilder.create().build();
          }
      
      
          /**
          * mybatis配置SqlSessionFactory和SqlSessionTemplate
          *
          * @return
          */
          @Bean
          SqlSessionFactory primarySqlSessionFactory() {
              SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
              sqlSessionFactoryBean.setDataSource(primaryDs());
              SqlSessionFactory sqlSessionFactory = null;
              try {
                  sqlSessionFactory = sqlSessionFactoryBean.getObject();
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return sqlSessionFactory;
          }
      
          /**
          * 创建事务管理器,自定义的数据源,如果不指定事务管理器,@Transitional注解不生效
          *
          * @param
          * @return
          */
          @Bean(name = "primaryTransactionManager")
          public DataSourceTransactionManager primaryTransactionManager() {
              return new DataSourceTransactionManager(primaryDs());
          }
      
          @Bean
          SqlSessionTemplate primarySqlSessionTemplate() {
              return new SqlSessionTemplate(primarySqlSessionFactory());
          }
      }
      
      1. 数据源2配置类
      @Configuration
      @MapperScan(basePackages = "com.example.datasource.icpMapper", sqlSessionTemplateRef = "icpSqlSessionTemplate")
      public class IcpDataSourceConfig {
      
          /**
          * 数据源配置
          *
          * @return
          */
          @Bean
          @ConfigurationProperties(prefix = "spring.datasource.icp")
          DataSource icpDs() {
              // 如果使用 druid 作为连接池,则需要使用DruidDataSourceBuilder
              return DruidDataSourceBuilder.create().build();
          }
      
      
          /**
          * mybatis配置SqlSessionFactory和SqlSessionTemplate
          *
          * @return
          */
          @Bean
          SqlSessionFactory icpSqlSessionFactory() {
              SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
              sqlSessionFactoryBean.setDataSource(icpDs());
              SqlSessionFactory sqlSessionFactory = null;
              try {
                  sqlSessionFactory = sqlSessionFactoryBean.getObject();
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return sqlSessionFactory;
          }
      
          /**
          * 创建事务管理器,自定义的数据源,如果不指定事务管理器,@Transitional注解不生效
          *
          * @param
          * @return
          */
          @Bean(name = "icpTransactionManager")
          public DataSourceTransactionManager icpTransactionManager(@Qualifier("icpDs") DataSource dataSource) {
              return new DataSourceTransactionManager(dataSource);
          }
      
          @Bean
          SqlSessionTemplate icpSqlSessionTemplate() {
              return new SqlSessionTemplate(icpSqlSessionFactory());
          }
      }
      
    2. 完成,接下来编写mapper,数据源1的mapper写在mapper目录下,数据源2的mapper写在icpMapper目录下,再service层注入即可使用

      @Transactional(rollbackFor = Exception.class, transactionManager = "icpTransactionManager")
      @Service
      public class AServiceImpl implements AService {
          //todo 业务服务类
      }
      

    参考文档:https://www.jianshu.com/p/2014d9a7b41d

  • 相关阅读:
    IntelliJ IDEA 安装和破解教程
    IntelliJ IDEA 快捷键
    分布式事务框架-seata初识
    Spring超详细总结
    spring注解之@Import注解的三种使用方式
    双亲委托模型
    日志管理-log4j与slf4j的使用
    最详细的自定义Spring Boot Starter开发教程
    深入JVM(二)JVM概述
    一篇长文说 git 基础
  • 原文地址:https://www.cnblogs.com/yloved/p/14662093.html
Copyright © 2011-2022 走看看