目录
相关网址
mybatis-plus官网:https://mybatis.plus/guide/dynamic-datasource.html#%E6%96%87%E6%A1%A3-documentation
主要参考:https://blog.csdn.net/belonghuang157405/article/details/89708851
改造原有的springboot项目
Pom文件的依赖
增加了dynamic-datasource-spring-boot-starter
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
application.yml文件
我主要修改了12行-30行其他没有变。
spring.autoconfigure.exclude这个配置要注意 和启动类配置一个作用(@SpringBootApplication(exclude= {DruidDataSourceAutoConfigure.class})),选一个就行
spring:
devtools:
restart:
enabled: true
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
serialization:
write-dates-as-timestamps: false
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 为了某些版本的springboot @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) 无法生效
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组
datasource:
master:
url: jdbc:mysql://192.168.27.238:30220/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root123
driverClassName: com.mysql.cj.jdbc.Driver
slave: # 支持主从、纯粹多库、以及混合配置 ,类、方法上加@DS注解切换数据源
url: jdbc:mysql://192.168.27.238:30220/test/test?serverTimezone=Hongkong&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false # serverTimezone=Hongkong 需要填上时区
username: root
password: root123
driverClassName: com.mysql.cj.jdbc.Driver
adminServer:
url: jdbc:mysql://192.168.27.238:30220/ry-vue?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root123
driverClassName: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 50
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 600000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall,slf4j
use-global-data-source-stat: true
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
stat-view-servlet:
enabled: true
login-username: admin
login-password: admin
reset-enable: true
url-pattern: /druid/*
allow: 0.0.0.0
deny:
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
session-stat-enable: false
session-stat-max-count: 500
redis:
# 地址
# host: 192.168.27.106
# 端口,默认为6379
# port: 7004
# 数据库索引
# database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
cluster:
max-redirects: 3
nodes:
- 192.168.25.62:7000
- 192.168.25.62:7001
- 192.168.27.79:7002
- 192.168.27.79:7003
- 192.168.27.106:7004
- 192.168.27.106:7005
knife4j:
# 开启增强配置2.0.6版本后支持,
enable: true
# 开启Swagger的Basic认证功能,默认是false
basic:
enable: true
# Basic认证用户名
username: admin
# Basic认证密码
password: admin
# logging start
#logging.file: "logs/hello.log"
logging:
file:
max-size: 2KB
max-history: 20
level:
root: INFO
com.swhysc: INFO
com.swhysc.staff.client.Local: debug
com.swhysc.staff.client.LocalSpring: debug
pattern:
console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint} %clr(%-40.40logger{39}){cyan}[lineno:%line] %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"
# file: "%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39}[lineno:%line]: %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"
# path: "/opt/logs"
# config: logback.xml
原有不变的类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
/**
* 数据库实体类
*/
@TableName("test_user")
@Data
@Builder
public class UserDO {
@TableId(type= IdType.AUTO)
private Long id;
private String name;
}
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.swhysc.base.entity.UserDO;
import org.apache.ibatis.annotations.Mapper;
/**
* adminServer库的Mapper类接口
*/
@Mapper
@DS("adminServer")
public interface DsUserMapper extends BaseMapper<UserDO> {
}
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.swhysc.base.entity.UserDO;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper类接口
*/
@Mapper
public interface UserMapper extends BaseMapper<UserDO> {
}
/**
* 配置分页插件
*/
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
import com.baomidou.mybatisplus.extension.service.IService;
import com.swhysc.base.entity.UserDO;
/**
* service类接口
*/
public interface DsUserService extends IService<UserDO> {
}
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.swhysc.base.entity.UserDO;
import com.swhysc.base.mapper.DsUserMapper;
import org.springframework.stereotype.Service;
/**
* service类实现
*/
@Service
public class DsUserServiceImpl extends ServiceImpl<DsUserMapper, UserDO> implements DsUserService {
}
分页和排序主要会用到的入参类
/**分页类,入参页面和页面数据大小*/
final IPage<UserDO> page = new Page<>(1,5);
/**查询封装类,主要是查询实体,以及排序字段*/
final QueryWrapper<UserDO> wrapper = new QueryWrapper<>();
wrapper.setEntity(UserDO.builder().build());
wrapper.orderByAsc("id");
/**必须注入了分页的拦截器bean分页再回有效果*/