SpringBoot 事务管理:单独开启事务和手动提交事务

单独开启事务

在 SpringBoot 中,可以通过在方法上添加注解 @Transactional 来开启事务。默认情况下,SpringBoot 使用的是基于注解的声明式事务管理。当使用 @Transactional 注解时,SpringBoot 会自动为该方法开启事务,并在方法执行完成后提交事务。如果方法执行过程中发生异常,则会回滚事务。

示例:

@Service
public class UserService {
    
    @Autowired
    private UserDao userDao;
    
    @Transactional
    public void addUser(User user) {
        userDao.addUser(user);    
    }
}

在上面的示例中,我们在 addUser 方法上添加了 @Transactional 注解,这样就可以开启事务了。当方法执行完成后,SpringBoot 会自动提交事务。

提交事务

当使用基于注解的声明式事务管理时,SpringBoot 会自动为我们管理事务的提交和回滚。因此,在一般情况下,我们不需要手动提交或回滚事务。

但是,在某些特殊情况下,我们可能需要手动提交或回滚事务,比如在使用 JdbcTemplate 等直接操作数据库的情况下。这时,我们可以使用 Spring 提供的 TransactionTemplate 来手动提交或回滚事务。

示例:

@Service
public class UserService {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Autowired
    private TransactionTemplate transactionTemplate;
    
    public void addUser(User user) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                jdbcTemplate.update('INSERT INTO user(name, age) VALUES (?, ?)', user.getName(), user.getAge());
            }
        });
    }
    
    public void updateUser(User user) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                jdbcTemplate.update('UPDATE user SET name = ?, age = ? WHERE id = ?', user.getName(), user.getAge(), user.getId());
            }
        });
    }
    
    public void deleteUser(Long id) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                jdbcTemplate.update('DELETE FROM user WHERE id = ?', id);
            }
        });
    }
}

在上面的示例中,我们使用了 TransactionTemplate 来手动提交或回滚事务。在每个方法中,我们都使用 transactionTemplate.execute() 方法来执行事务,并在内部传入一个 TransactionCallbackWithoutResult 对象来执行具体的数据库操作。当方法执行完成后,SpringBoot 会自动提交事务。如果方法执行过程中发生异常,则会回滚事务。

SpringBoot 事务管理:单独开启事务和手动提交事务

原文地址: https://www.cveoy.top/t/topic/lFeA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录