SpringBoot 集成 MP、DS实现读写分离 事务分析

本文介绍了如何在SpringBoot项目中结合Mybatis-Plus(MP)和dynamic-datasource-spring-boot-starter(DS)实现读写分离,并分析了事务管理中的问题及解决方案。内容包括MP和DS的配置,数据源切换,以及事务导致的数据源固定问题及其解决策略。
摘要由CSDN通过智能技术生成

SpringBoot 集成 Mybatis-Plus、Dynamic-DataSource实现读写分离 事务分析

github :https://github.com/lanchengx/dynamic


MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFBKNXS0-1589729649005)(7A7C98C3BE1A4AEAA80850A520500185)]



dynamic-datasource-spring-boot-starter(简称 DS) 是一个基于springboot的快速集成多数据源的启动器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vcO33Twx-1589729649007)(172EC014A6DE4CB88A67C521BE4CF084)]


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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值