关于java:Transactional-与-synchronized-联合使用问题

42次阅读

共计 567 个字符,预计需要花费 2 分钟才能阅读完成。

应用 synchronized 为操作数据库办法加锁,防止并发操作,然而为办法外加上事务注解 @Transactional 则无奈完全避免并发操作,起因如下:
synchronized 是针对 办法的锁 而 事务注解是 针对办法的盘绕解决 即在办法运行前开启事务 办法完结后提交事务

    getTransaction();
    process();
    commitTransaction();
    process 的锁并不能束缚事务的办法 于是 呈现了 其余线程获取锁的时候 事务还没提交的状况 产生并发问题
    

解决办法是 将事务的获取和提交办法手动写入 process 办法中 使其纳入 process 锁的束缚

@Autowired
private PlatformTransactionManager platformTransactionManager;
@Autowired
private TransactionDefinition transactionDefinition;

// 开启事务
TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);
// do something.
// 提交事务
platformTransactionManager.commit(transaction);

正文完
 0