繁体   English   中英

SpringBoot中@transactional注解的实时用途是什么?

[英]What is the Realtime uses of @transactional annotation in SpringBoot?

我没有任何明确的概念为什么我们使用@transactional 注释。 我需要一个实时概念来使用它。

请给我一个清晰的概念和例子。

事务是一系列操作,要么全部发生,要么什么都不发生。 因此,在数据库系统中,您可以启动一个事务,然后执行一系列查询,然后如果所有查询都成功则提交事务,或者如果出现错误则回滚。 在交易期间,所有更改仅对您可见 session 并且在回滚的情况下,您所做的所有更改都将被撤消。

作为一个真实世界的例子,您可以将资金从一个帐户转移到另一个帐户。 有一个查询是从一个帐户中提款,另一个查询是将钱存入另一个帐户。 如果您在没有交易的情况下执行这些查询,而第二个查询由于某种原因失败了,那么钱会从一个帐户中提取但不会存入另一个帐户,这意味着您已经消除了钱。

Spring 使用@Transactional注释为此构建了一个抽象层,它在调用方法之前启动一个事务,如果一切正常则提交它,或者在抛出异常时进行回滚。

public class MoneyTransferService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional
    public void transferMoney(Double amount, Integer debitAccount, Integer creditAccount) {

        jdbcTemplate.update("UPDATE accounts SET balance = balance - ? where accountId = ?", amount, debitAccount);
        jdbcTemplate.update("UPDATE accounts SET balance = balance + ? where accountId = ?", amount, creditAccount);

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM