druid多数据源+mybatis-plus的dynamic【⼀个简单例⼦】主要利⽤dynamic来实现动态数据源
1 pom⽂件加依赖
<!--版本号-->
<properties>
druid连接池配置详解<mybatisplus.boot.version>3.1.0</mybatisplus.boot.version>
<dynamic.datasource.boot.version>2.5.4</dynamic.datasource.boot.version>
<druid-spring-boot.version>1.1.10</druid-spring-boot.version>
</properties>
<!-- 德鲁伊连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring-boot.version}</version>
</dependency>
<!--苞⽶⾖的动态数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic.datasource.boot.version}</version>
</dependency>
<!--苞⽶⾖的代码精简插件-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.boot.version}</version>
</dependency>
2 配置yml信息
dynamic包⾥⾯也有德鲁伊的配置信息,但是不是很多,主要是为了实现动态路由
连接池的信息⼀定要配置化再dynamic下⾯的⼀层,不然是不会⽣效的
数据源监控建议配置在datasource下⾯
server:
port:1234
spring:
# 为了某些版本的springboot  @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) ⽆法⽣效
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: db1 # 多数据源的情况下,主数据源(默认值master),可以⾃定义
datasource:
db1:
url: jdbc:mysql://127.0.0.1:3306/photo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTim ezone=GMT%2B8&serverTimezone=Asia/Shanghai
username: root
password:123456
driverClassName:  sql.cj.jdbc.Driver
db2:
url: jdbc:mysql://127.0.0.1:3306/photo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTi mezone=GMT%2B8&serverTimezone=Asia/Shanghai
username: root
password:123456
driverClassName:  sql.cj.jdbc.Driver
# 公共参数配置(连接池)
druid:
initial-size:10
max-active:100
min-idle:10
max-wait:60000
pool-prepared-statements:true
max-pool-prepared-statement-per-connection-size:20
time-between-eviction-runs-millis:60000
min-evictable-idle-time-millis:300000
test-while-idle:true
test-on-borrow:false
test-on-return:false
# 数据源监控配置
druid:
stat-view-servlet:
enabled:true
url-pattern: /druid/*
login-username: druid
login-password:123456
3 配置数据库
就很简单的写了⼏个字段db1
db2
4 配置代码
启动项上加上下⾯这个,就是去掉springboot⾃动配置数据源
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
启动项⽬后默认是 primary指定的数据源db1
如果需要使⽤第⼆个数据库,只需要在mapper或者service类上配置@DS("db2")即可
mapper⽂件
@DS("db2")
public interface Photo2Mapper extends BaseMapper<PhotoEntity>{
PhotoEntity selectOneById(String id);
}
xml⽂件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"> <mapper namespace="project.mapper.Photo2Mapper">
<select id="selectOneById"resultType="ity.PhotoEntity">
select id, cert_name, trade_id from batch_photo_202102 where id = #{id}
</select>
</mapper>
service接⼝
@DS("db2")
public interface Photo2Service extends IService<PhotoEntity>{
PhotoEntity selectOneById(String id);
}
impl⽂件
@Service
public class Photo2ServiceImpl extends ServiceImpl<Photo2Mapper, PhotoEntity>implements Photo2Service {
@Resource
private Photo2Mapper photo2Mapper;
@Override
public PhotoEntity selectOneById(String id){
return photo2Mapper.selectOneById(id);
}
}
test类测试⼀下
@Autowired
private PhotoService photoService;
@Resource
private PhotoMapper photoMapper;
@Resource
private Photo2Mapper photo2Mapper;
@Autowired
private Photo2Service photo2Service;
@Test
public void ds(){
PhotoEntity photoEntity = photoMapper.selectById("333");
log.info("数据库db1============={}", String());
PhotoEntity mapper = photo2Mapper.selectById("333");
log.info("mapper============={}", String());
PhotoEntity plusMapper = photo2Mapper.selectOne(new QueryWrapper<PhotoEntity>().lambda().eq(PhotoEntity::getId,"333"));    log.info("plusMapper============={}", String());
PhotoEntity service = photo2Service.selectOneById("333");
log.info("service============={}", String());
PhotoEntity plusService = One(new QueryWrapper<PhotoEntity>().lambda().eq(PhotoEntity::getId,"333"));
log.info("plusService============={}", String());
}
结果如下
⾃定义sql和plus的代码都能使⽤第⼆个数据源
有什么不懂的评论区问吧