Mybatis如何配置多数据源

MyBatis 多数据源配置的核心是通过AbstractRoutingDataSource实现动态路由,结合 Spring AOP 可实现声明式切换,适用于读写分离、多业务库等场景。实际使用中需注意事务一致性和线程安全问题,根据业务复杂度选择合适的切换策略。

  1. 先在配置文件里写好两个库的地址
    就像给两个数据库 “编个号”,比如叫 db1 和 db2,把它们的连接地址、账号密码都写在 application.yml 里,告诉程序 “这俩库你得认识”。
  2. 搞个 “数据源总管”
    用 Spring 提供的一个叫 AbstractRoutingDataSource 的工具,它就像个 “调度员”。你得告诉它:“db1 对应哪个库,db2 对应哪个库”,再指定一个默认用哪个(比如默认用 db1)。
  3. 给线程贴个 “标签”
    用 ThreadLocal 这个东西,给当前线程贴个 “用 db1” 或 “用 db2” 的标签。程序执行时,“调度员” 会看这个标签,决定去查哪个库。
  4. 用的时候指定一下就行
    两种方式:
  • 简单的话,直接在方法上贴个自定义注解AOP,比如 @用 db2,调用这个方法时就自动切到 db2 了;

    高并发场景下Canal出现的不一致问题

  1. 从源头(MySQL)保证 binlog 格式正确、顺序可靠;
  2. 中间层(Canal)通过集群化和偏移量持久化,确保不丢数据、不重复解析;
  3. 消费端通过幂等性设计和可靠存储,确保事件被正确处理;
  4. 最后通过业务层的定期校验,兜底解决极端场景下的不一致。