多数据源最方便简单的实现,使用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的那个接口。