1、简介
在实际开发中项目很容易就遇到使用多数据源的情形,比如:在新增数据时除了给自己的库保留一份,还需要同步到别人的库;转移程序需要将A库的数据转到B库等等。常见的使用Mybatis-Plus配置多数据源方式有两种:一种是通过java config的方式手动配置两个数据源,另一种方式便是使用mybatis-plus-dynamic。这里介绍下mybatis-plus-dynamic的使用。
2、实战
2.1 pom.xml引入依赖
<!-- mybatis-plus配置不同数据源 需要引入的包 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
2.2 application-dev.yml添加配置
application.yml中配置不同的yml,启动不同的服务环境比如dev,sit,pro等
server:
port: 8086
spring:
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: mysql1 #设置默认数据库源
strict: false #严格匹配数据源,默认为false,true未匹配到指定数据库时抛异常,false使用默认数据源
datasource:
mysql1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo1?serverTimezone=UTC
username: root
password: root1234
# type: com.alibaba.druid.pool.DruidDataSource
mysql2:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo2?serverTimezone=UTC
username: root
password: root1234
# type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
#configuration:
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台打印sql开关
mapper-locations:
classpath: mapper/*.xml
type-aliases-package: com.example.demo.entity
#showSql
logging:
level:
com:
example:
mapper : error
由于本机只安装了MySQL数据库,所以创建了两个不同名字的数据库用于模拟表示不同数据库场景。配置在dynamic下进行,其中primary必须配置,用于选择默认的数据源,这里mysql1是默认数据库。
2.3 使用
使用主要是通过@DS注解进行配置选择数据源,并且可以在类上进行配置。如果不使用@DS注解的类则使用primary配置的默认数据源。
@DS("mysql1")
@Repository("UserMapper")
public interface UserMapper extends BaseMapper<User> {
}
@DS("mysql2")
@Repository("User2Mapper")
public interface User2Mapper extends BaseMapper<User2> {
}
2.4 测试
@SpringBootTest
class DemoSpringMybatisplusApplicationTests {
@Autowired
UserMapper userMapper;
@Autowired
User2Mapper user2Mapper;
@Test
void test() {
User user = userMapper.selectById(1);
System.out.println("执行了数据源mysql1数据源:"+user.toString());
User2 user2 = user2Mapper.selectById(1);
System.out.println("执行了数据源mysql2数据源:"+user2.toString());
}
}
2.5 测试结果
3、项目结构和代码
源码下载 demo-springboot-mybatisplus
参考资料
https://blog.csdn.net/jike11231/article/details/120722718
https://blog.csdn.net/weixin_44690195/article/details/108080078
https://blog.csdn.net/qq_38353700/article/details/118583828
https://blog.csdn.net/qq_38550836/article/details/103436898