目前声明式事物@Transaction只适用于单线程,在多线程情况下是不生效的。那么,如果是多线程的情况下,如何进行事物控制呢 ,我们可以采用手动开启事物的 方法。详见代码:

HintManager hintManager = HintManager.getInstance();
hintManager.setMasterRouteOnly();
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
TransactionStatus transaction= dstManager.getTransaction(def);


在需要提交的地方提交事物:
dstManager.commit(transaction);

在catch中,如果报错回滚事物:
dstManager.rollback(transaction);