当前位置: 首页 > news >正文

【排查了一天的坑】Flowable 监听器切换数据源失败(附详细排查过程)

有意思的是:其他接口调用 @DS(“XX”) MethodA 数据源正常切换,只有 Flowable 监听器的方法不可以。

监听器的调用本身仍处于 FlowableCommandContextFlowable 在执行任务事件时,会打开自己的:自己的事务自己的 SqlSession自己的数据源绑定最终导致:✅ DynamicDatasourceSpring 代理正在起作用但❌ FlowableMyBatis 环境主动覆盖了 Connection,导致 DB 仍然指向默认数据源因此,Flowable 监听器内部的 SQL 调用,多半还是走 流程主数据源
解决方案:
让处理逻辑完全“脱离 Flowable 线程1. Flowable 监听器只发送事件:
@Autowired
private ApplicationEventPublisher publisher;@Override
protected void taskCreated(FlowableEngineEntityEvent event) {TaskEntity task = (TaskEntity) event.getEntity();publisher.publishEvent(new TaskCreatedEvent(task));}
2.手动开启一个新的 Spring 事务(脱离 Flowable@Transactional(propagation = Propagation.REQUIRES_NEW)
@DS("usercenter")
public void MethodA  (TaskEntity task) {...
}
监听器调用这个方法时,会:
暂停 Flowable 的事务;
开一个新的、纯 Spring 的事务;
动态数据源切换立即生效
Flowable 监听器里调用时,情况完全不同监听器是由 Flowable 引擎触发的。
当 Flowable 执行一个任务节点时,它内部是这么做的:CommandExecutor.execute(new AddTaskCmd(...))在执行过程中,它会:打开 Flowable 自己的事务使用 FlowableMyBatis 环境 (DbSqlSessionFactory)从它自己保存的 DataSource 拿连接(通常是默认库)在这个环境中调用所有的 Listener于是,当你在监听器里调用 Service 时:✅ 你的 @DS 注解确实切换了 ThreadLocal;✅ DynamicRoutingDataSource 也能返回 "usercenter";❌ 但这时候 Flowable 已经提前打开了自己的 SqlSessionConnection;❌ 你的 MyBatis 调用虽然走 Spring,但当前线程已经绑定了 Flowable 的数据库连接上下文;❌ 所以 SQL 仍然在 Flowable 的默认库执行。换句话说:Spring 想用 "usercenter"DataSource,
但 Flowable 的事务环境已经劫持了 ConnectionSpring 拿到的 Connection 实际仍然来自默认库
排查过程
1.是否开启事务
2.是否本类调用 (非代理对象,aop不生效)
3.是否 private 修饰方法 (aop不生效)
4.手动切换数据源
5.打印数据源是否切换
// 在代码中直接打印当前数据源名称
String currentDataSource = DynamicDataSourceContextHolder.peek();
log.info("当前数据源:{}", currentDataSource);
6.@DS加在 MapperService 都尝试了所有问题都排除了,实在没想到 flowable 监听器底层开启了自己的事务
http://www.dtcms.com/a/579151.html

相关文章:

  • 网站排名易下拉稳定网页在线制作图片
  • 获得类运行时的结构、动态创建对象执行方法和性能对比分析
  • 新手搭建论坛己做网站企业宣传画册设计公司
  • SpringAOP的相关概念
  • 成都网站设计招聘全球招商网
  • 如何用Postman测试API?
  • 学校网站建设目的是什么微网站开发平台案例
  • 学校网站建设问卷调查表如何选择佛山网站建设
  • shell(2)--shell脚本的编写
  • Linux挂载磁盘方法
  • 河南企业网官方网站昆明今天刚刚发生的新闻
  • 空间坐标系转换矩阵计算
  • 城市建设理论研究收录网站阿里服务器租用价格表
  • 研究生论文阅读指南:整理的心法
  • 合肥网站建设渠道建安培训官网
  • 专业的ai软著材料选哪家公司
  • 网站产品优化描述网站开发都有什么类别
  • 【Vue基础】--变化检测机制
  • 哪些网站可以做移动端模板新乡网站建设制作
  • 九章算MDPI解读【姜黄素】广西医大陶人川、雍翔智课题组:姜黄素对放疗/化疗引起的口腔黏膜炎的影响
  • 网站建设整改报告php创建网页
  • 网站制作应用网站开发调查问卷题
  • 网站的宽度广州网站开发服务
  • LangChain的核心组件之Models使用手册
  • zencart网站搬家plm项目管理系统
  • 缔客网络上海响应式网站建设建网站 行业 销售额
  • 做盗市相关网站如何在线上推广产品
  • iMX6ULL使用GUI Guider开发LVGL
  • 新乡移动网站建设制作视频特效
  • 丹阳市住房建设管理局网站wordpress怎么挂广告