主要利用dynamic来实现动态数据源
1 pom文件加依赖
<!--版本号-->
<properties>
<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&serverTimezone=GMT%2B8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driverClassName: com.mysql.cj.jdbc.Driver
db2:
url: jdbc:mysql://127.0.0.1:3306/photo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driverClassName: com.mysql.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
也可以看一下监控信息http://127.0.0.1:1234/druid/datasource.html
3 配置数据库
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 "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.lh.my.project.mapper.Photo2Mapper">
<select id="selectOneById" resultType="cn.lh.my.project.entity.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============={}", photoEntity.toString());
PhotoEntity mapper = photo2Mapper.selectById("333");
log.info("mapper============={}", mapper.toString());
PhotoEntity plusMapper = photo2Mapper.selectOne(new QueryWrapper<PhotoEntity>().lambda().eq(PhotoEntity::getId, "333"));
log.info("plusMapper============={}", plusMapper.toString());
PhotoEntity service = photo2Service.selectOneById("333");
log.info("service============={}", service.toString());
PhotoEntity plusService = photo2Service.getOne(new QueryWrapper<PhotoEntity>().lambda().eq(PhotoEntity::getId, "333"));
log.info("plusService============={}", plusService.toString());
}
结果如下
有什么不懂的评论区问吧
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116382.html