SpringBoot 集成 Mybatis-Plus、Dynamic-DataSource实现读写分离 事务分析
github :https://github.com/lanchengx/dynamic
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
dynamic-datasource-spring-boot-starter(简称 DS) 是一个基于springboot的快速集成多数据源的启动器。
1. Myabtis-Plus 配置
@Configuration
public class MybatisPlusConifg {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
dbConfig.setIdType(IdType.AUTO);
dbConfig.setSelectStrategy(FieldStrategy.NOT_EMPTY);
globalConfig.setDbConfig(dbConfig);
return globalConfig;
}
@Bean
public PaginationInterceptor masterPaginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(3);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
List<ISqlParser> sqlParserList = new ArrayList<>();
// 攻击 SQL 阻断解析器、加入解析链
sqlParserList.add(getBlockAttackSqlParser());
paginationInterceptor.setSqlParserList(sqlParserList);
return paginationInterceptor;
}
private BlockAttackSqlParser getBlockAttackSqlParser(){
return new BlockAttackSqlParser() {
@Override
public void processDelete(Delete delete) {
// 如果你想自定义做点什么,可以重写父类方法像这样子
// if ("user".equals(delete.getTable().getName())) {
// 自定义跳过某个表,其他关联表可以调用 delete.getTables() 判断
return ;
}
super.processDelete(delete);
}
@Override
public void processUpdate(Update update) {
super.processUpdate(update);
}
};
}
}
2. dynamic-datasource-spring-boot-starter 配置
依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency