1.多数据源配置类

整体项目结构

1).pom.xml 项目依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sz</groupId>
    <artifactId>MybatisDataSourcesDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MybatisDataSourcesDemo</name>
    <description>MybatisDataSourcesDemo</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.sz.mybatisdatasourcesdemo.MybatisDataSourcesDemoApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2)多数据源配置类

DataSource -> SqlsessionFactory -> SqlSessionTemplate

​ -> DataSourceTransactionManager

(1).DS1DataSourceConfig 配置类

@MapperScan(basePackages = "com.sz.mybatisdatasourcesdemo.mapper.ds1",sqlSessionTemplateRef = "db1SqlSessionTemplate")
@Component
public class DS1DataSourceConfig {

    @Bean
    // 给DataSource 绑定属性值
    @ConfigurationProperties(prefix = "ds1")
    //创建一个数据源对象 底层通过 BeanUtils.instantiateClass(type); 实例化一个数据源对象
    //候选的数据源有
    //"com.zaxxer.hikari.HikariDataSource",
    //	"org.apache.tomcat.jdbc.pool.DataSource", "org.apache.commons.dbcp2.BasicDataSource"
    public DataSource ds1DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory ds1SqlsessionFactory (
            @Qualifier("ds1DataSource")DataSource dataSource
    )throws Exception
    {
        // 工厂bean  SqlSessionFactory
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        //设置数据源
        bean.setDataSource(dataSource);
        //加载映射文件
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:mybatis/ds1/*.xml"));
        return bean.getObject();
    }

    @Bean
    // 数据源事务管理器
    public DataSourceTransactionManager db1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("ds1SqlsessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

(2).DS2DataSourceConfig 配置类

@MapperScan(basePackages = "com.sz.mybatisdatasourcesdemo.mapper.ds2",sqlSessionTemplateRef = "ds2SqlSessionTemplate")
@Component
public class DS2DataSourceConfig {

    @Bean
    // 给DataSource 绑定属性值
    @ConfigurationProperties(prefix = "ds2")
    //创建一个数据源对象 底层通过 BeanUtils.instantiateClass(type); 实例化一个数据源对象
    //候选的数据源有
    //"com.zaxxer.hikari.HikariDataSource",
    //	"org.apache.tomcat.jdbc.pool.DataSource", "org.apache.commons.dbcp2.BasicDataSource"
    public DataSource ds2DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory ds2SqlsessionFactory (
            @Qualifier("ds2DataSource")DataSource dataSource
    )throws Exception
    {
        // 工厂bean  SqlSessionFactory
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        //设置数据源
        bean.setDataSource(dataSource);
        //加载映射文件
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:mybatis/ds2/*.xml"));
        return bean.getObject();
    }

    @Bean
    // 数据源事务管理器
    public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlsessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

3) 多Mapper

ds1 路径下 与 ds2 路径下各一个 mapper文件 分别由 ds1配置类 与 ds2配置类 去扫描生成代理类

4) application.properties 配置文件

用两个数据库模拟不同的数据源

# 应用名称
spring.application.name=MybatisDataSourcesDemo

mybatis-plus.mapper-locations=classpath:mybatis/mapper/ds1/*.xml,classpath:mybatis/mapper/ds2/*.xml

#ds1
ds1.type=com.alibaba.druid.pool.DruidDataSource
ds1.jdbc-url=jdbc:mysql://localhost:3306/ds1?serverTimezone=GMT 8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
ds1.username=root
ds1.password=root
ds1.driver-class-name=com.mysql.cj.jdbc.Driver

#ds2
ds2.type=com.alibaba.druid.pool.DruidDataSource
ds2.jdbc-url=jdbc:mysql://localhost:3306/ds2?serverTimezone=GMT 8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
ds2.username=root
ds2.password=root
ds2.driver-class-name=com.mysql.cj.jdbc.Driver

5) 测试类

 @Autowired
    private AnimalService animalService;
    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        animalService.remove(null);
        userService.remove(null);

        Animal animal = new Animal();
        animal.setName("老虎");
        animalService.save(animal);

        User user = new User();
        user.setName("张三");
        userService.save(user);

        List<Animal> animals = animalService.list();
        System.out.println("animals = "   animals);

        List<User> userList = userService.list();
        System.out.println("userList = "   userList);

    }

2.@DS 注解 切换数据源

分别在 ds1和 ds2库中添加 user 表

1) 新增依赖

版本与 mybatis-plus保存一致

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>

2) application.yml 配置类

spring:
  datasource:
    dynamic:
#      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        slave_1:
          url: jdbc:mysql://localhost:3306/ds1?serverTimezone=GMT 8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_2:
          url: jdbc:mysql://localhost:3306/ds2?serverTimezone=GMT 8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver

3) 添加 @DS注解 切换数据源

@Service
public class UserServiceImpl
        extends ServiceImpl<UserMapper, User>
        implements UserService {

    @Override
    @DS("slave_1")
    public List<User> findAllDS1()
    {
        return this.baseMapper.selectList(null);
    }

    @Override
    @DS("slave_2")
    public List<User> findAllDS2()
    {
        return this.baseMapper.selectList(null);
    }
}

4) 测试类

   @Test
    void testDS()
    {
        List<User> allDS1 = userService.findAllDS1();
        System.out.println("allDS1 = "   allDS1);
        List<User> allDS2 = userService.findAllDS2();
        System.out.println("allDS2 = "   allDS2);
    }

到此这篇关于Mybatis-plus多数据源配置的两种方式总结的文章就介绍到这了,更多相关Mybatis-plus多数据源配置内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Mybatis-plus多数据源配置的两种方式总结的更多相关文章

  1. Yii2语言国际化自动配置详解

    这篇文章主要介绍了Yii2语言国际化自动配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. MybatisPlus中的多表条件排序查询

    这篇文章主要介绍了MybatisPlus中的多表条件排序查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. SpringMVC静态资源配置过程详解

    在javaweb项目中配置了DispatcherServlet的情况下,如果不进行额外配置的话,几乎所有的请求都会走这个servlet来处理,默认静态资源按路径是访问不到的会报404错误,下面就来讲一讲如何配置才能访问到静态资源吧

  4. 关于@RequestLine的使用及配置

    这篇文章主要介绍了关于@RequestLine的使用及配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. MybatisPlus如何处理Mysql的json类型

    这篇文章主要介绍了MybatisPlus如何处理Mysql的json类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. SpringBoot配置拦截器实现过程详解

    在系统中经常需要在处理用户请求之前和之后执行一些行为,例如检测用户的权限,或者将请求的信息记录到日志中,即平时所说的"权限检测"及"日志记录",下面这篇文章主要给大家介绍了关于在SpringBoot项目中整合拦截器的相关资料,需要的朋友可以参考下

  7. SpringBoot浅析安全管理之Spring Security配置

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot安全管理Spring Security基本配置

  8. Vue如何实现多页面配置以及打包方式

    这篇文章主要介绍了Vue如何实现多页面配置以及打包方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. PHP网站自动化配置的实现方法(必看)

    下面小编就为大家带来一篇PHP网站自动化配置的实现方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. 轻松玩转Java配置的Classpath

    和Java类路径打交道的过程中,开发者偶尔会遇到麻烦。例如,大多数Servlet引擎使用定制的类装载器,动态地装入那些在classpath指定的目录内发生变化的类。这个工具要求指定一个Java类的名字,然后根据classpath的指引,找出类装载器即将装载的类所在位置的绝对路径。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部