我正在实施从银行帐户转帐到另一个银行帐户。我的问题是,如果我有@Transactional
注释(来自guice)我是否必须使用同步? Transactional是否确保另一个线程不会遇到资源?
@Transactional(rollbackOn = RuntimeException.class)
synchronized public void transfer(@NonNull final Transfer transfer) {
withdrawFromOwnerAccount(ownerAccount, transfer.getAmount());
depositToReceiverAccount(receiverAccount, transfer.getAmount());
}
答案 0 :(得分:-1)
“UnitOfWork是线程安全的,可以缓存多次使用或直接注入单例。” see
因此,我的回答是肯定的。
顺便说一下。只有当线程处理同一个对象时,同步才会生效(Singleton?)。
重要的是底层dbms可以安全地处理事务。我假设使用了一种mysql或postgres。框架应确保用于执行事务和数据库操作的连接在一个事务期间仅在一个线程中使用。这是一个非常简单的要求,并且在Java服务器中安全地处理了20年。