异常

image.png

事务失效的原因

事务在某些情况下可能不会按预期那样工作,以下是一些常见的原因:

  1. 子线程中的事务不会生效
  2. 异常处理不当
  3. 错误的事务传播行为配置
  4. 不支持事务的存储引擎
  5. 非运行时异常
  6. 事务配置缺失或不正确

挂载事务提交之后处理

// 判断当前是否在事务内
                    if (!TransactionSynchronizationManager.isActualTransactionActive()) {
                        // 异步更新执行数据
                        log.info("无事务异步更新执行数据|event:{}, actInst:{}", executionTmp.getEventName(), executionTmp.getActivityInstanceId());
                        camundaGlobalListenerDelegate.redisDelayQueueUtil.addDelayQueue(executionTmp, RedisDelayQueueEnum.PROCESS_EXECUTION_RECORD);
                    } else {
                        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
                            @Override
                            public void afterCommit() {
                                // 异步更新执行数据
                                log.info("异步更新执行数据|event:{}, actInst:{}", executionTmp.getEventName(), executionTmp.getActivityInstanceId());
                                camundaGlobalListenerDelegate.redisDelayQueueUtil.addDelayQueue(executionTmp, RedisDelayQueueEnum.PROCESS_EXECUTION_RECORD);
                            }
                        });
                    }

事务传播行为

事务传播行为描述了当一个事务方法调用另一个事务方法时,如何处理这些事务之间的关系。以下是几种不同的传播行为及其含义:

  1. Propagation.REQUIRED
  2. Propagation.SUPPORTS
  3. Propagation.MANDATORY
  4. Propagation.REQUIRES_NEW
  5. Propagation.NOT_SUPPORTED