zoukankan      html  css  js  c++  java
  • spring boot和mybatis的多源配置亲测可用非常简单哦铁闸门

    SpringBoot和Mybatis配置多数据源连接多个数据库 - 云+社区 - 腾讯云 (tencent.com)连接

    只需要三步

    首先导包mybaits的包

    <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.11</version><!--$NO-MVN-MAN-VER$ -->
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.0.10.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
                <version>2.7.9</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    View Code

    yml(在自己)

    # master 数据源配置
    master.datasource.url=jdbc:mysql://127.0.0.1:3306/test_mybatis1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT
    master.datasource.username=root
    master.datasource.password=123456
    master.datasource.driverClassName=com.mysql.jdbc.Driver
    
    # second 数据源配置
    second.datasource.url=jdbc:mysql://127.0.0.1:3306/test_mybatis2?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT
    second.datasource.username=root
    second.datasource.password=123456
    second.datasource.driverClassName=com.mysql.jdbc.Driver
    View Code

    然后使用一个配置类(master节点)

    package cn.jiedada.configuration;
    
    import com.alibaba.druid.pool.DruidDataSource;
    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.beans.factory.annotation.Value;
    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 javax.sql.DataSource;
    
    @Configuration
    // 扫描 Mapper 接口并容器管理
    @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
    public class MasterDataSourceConfig {
     
        // 精确到 master 目录,以便跟其他数据源隔离
        static final String PACKAGE = "cn.jiedada.mapper.master";
        static final String MAPPER_LOCATION = "classpath:cn/jiedada/mapper/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();
        }
    }
    View Code

    从节点

    package cn.jiedada.configuration;
    
    import com.alibaba.druid.pool.DruidDataSource;
    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.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    // 扫描 Mapper 接口并容器管理
    @MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
    public class SecondDataSourceConfig {
    
        // 精确到 cluster 目录,以便跟其他数据源隔离
        static final String PACKAGE = "cn.jiedada.mapper.slave";
        static final String MAPPER_LOCATION = "classpath:cn/jiedada/mapper/slave/*.xml";
    
        @Value("${second.datasource.url}")
        private String url;
    
        @Value("${second.datasource.username}")
        private String user;
    
        @Value("${second.datasource.password}")
        private String password;
    
        @Value("${second.datasource.driverClassName}")
        private String driverClass;
    
        @Bean(name = "secondDataSource")
        public DataSource clusterDataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driverClass);
            dataSource.setUrl(url);
            dataSource.setUsername(user);
            dataSource.setPassword(password);
            return dataSource;
        }
    
        @Bean(name = "secondTransactionManager")
        public DataSourceTransactionManager clusterTransactionManager() {
            return new DataSourceTransactionManager(clusterDataSource());
        }
    
        @Bean(name = "secondSqlSessionFactory")
        public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
                throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(clusterDataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(SecondDataSourceConfig.MAPPER_LOCATION));
            return sessionFactory.getObject();
        }
    }
    View Code

    就完事了然后写mapper,service,controller非常的爽啊(找了好久才找到)

    再给大家写详细一点接口mapper

     

     

     这个是xml文件

    测试用例

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = ApplicationDataSource.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    class ModuleMainApplicationTests {
        @Autowired
        private UserDao userDao;
    
        @Autowired
        private DeptDao deptDao;
    
        @org.junit.jupiter.api.Test
        public void test01() throws Exception{
            System.out.println(userDao.getAll());
        }
        @org.junit.jupiter.api.Test
        public void test02() throws Exception{
            System.out.println(deptDao.getAll());
        }
    }
    View Code
  • 相关阅读:
    asp.net文件操作类
    MSMQ是什么?
    Type.GetType()在跨程序集反射时返回null的解决方法
    ASP.NET反射
    VS单元测试入门实践教程
    详解Linq to SQL
    .Net资源文件全球化
    正则表达式使用详解
    C# 中的委托和事件详解
    python基础
  • 原文地址:https://www.cnblogs.com/xiaoruirui/p/14089987.html
Copyright © 2011-2022 走看看