spring boot mybatis 注解切换多数据源

mybatis | 2019-09-13 10:02:39

多数据源最方便简单的实现,使用dynamic-datasource-spring-boot-starter框架,几个配置然后就可以用注解切换数据源,dynamic-datasource-spring-boot-starter是国内优秀团队开发的多数据源框架。我的框架是springBoot+mybatis+mybatisPlus

1.pom引入 dynamic-datasource-spring-boot-starter

<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatisplus-spring-boot-starter</artifactId>
        <version>1.0.4</version>
</dependency>
<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.0</version>
</dependency>
<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
</dependency>
<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.1-gamma</version>
</dependency>
<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>1.4.0</version>
</dependency>
<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
</dependency>

2.spring boot 启动类 排除默认的数据源

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

3.spring boot属性配置多数据源

#数据库 默认
spring.datasource.dynamic.master.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.dynamic.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.master.url=jdbc:mysql://rm-wz9982376cn.mysql.rds.aliyuncs.com/ztalk?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true
spring.datasource.dynamic.master.username=root
spring.datasource.dynamic.master.password=123456!
#数据库 user
spring.datasource.dynamic.slave.zeeUser.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.dynamic.slave.zeeUser.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.slave.zeeUser.url=jdbc:mysql://rm-wz99823k.mysql.rds.aliyuncs.com/zuser?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true
spring.datasource.dynamic.slave.zeeUser.username=root
spring.datasource.dynamic.slave.zeeUser.password=123456!

不用注解就是用默认的数据

4.测试用注解切换数据源

    @DS("zeeUser")
        @Insert("insert into  sys_user(username) values('hyhaha')")
        int insert();


    注意:在insert和update时不能启用事务,同一事务下不支持切换,除非你用注解等方式新起一个事务,我了解了其中的源码,原理是mybatis,在获取数据源的时候会检查你有没有实现数据源的接口,如果你实现了,就会调你的方法,而这个框架就是拦截了加了注解的方法,来动态实现mybatis的那个接口。

    登录后即可回复 登录 | 注册
        
    关注编程学问公众号