dynamic-datasource-spring-boot-starter 动态事务判断方案

多数据源混用时,对于事务的使用、限制、判断尤为重要,以免出现数据异常情况

SpringBoot 原始事务

判单当前线程正在一个活动事务中

1
2
3
4
5
6
7
@Transactional
public FlowStartResult startFlow(FlowStartParams params) {
if (TransactionSynchronizationManager.isActualTransactionActive()) {
// 当前线程正在一个活动事务中
}
}

DynamicDatasource 原始事务

限制外层调用必须使用事务

1
2
3
4
@DSTransactional(propagation = MANDATORY) // 标记限制外层调用必须加上 DSTransactional 事务注解
public FlowStartResult startFlow(FlowStartParams params) {
// 当外部 Service 调用 startFlow 时,没有打上 DSTransactional 的事务注解,将会抛出异常
}