首页常见问题正文

Spring事务管理的三个核心接口

更新时间:2023-03-09 来源:黑马程序员 浏览量:

IT培训班

  1.PlatformTransactionManager

  定义了事务的管理行为,例如事务的开始、提交、回滚等。

  2.TransactionDefinition

  定义了事务的隔离级别、超时时间、是否只读等属性。

  3.TransactionStatus

  表示事务的状态,例如事务是否已经开始、是否已经提交、是否已经回滚等。

  以下是一个简单的示例代码,演示如何使用这三个核心接口来进行事务管理:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

public class MyService {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Autowired
    private PlatformTransactionManager transactionManager;
    
    public void myTransactionalMethod() {
        // 定义事务属性
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        def.setTimeout(30);
        def.setReadOnly(false);
        
        // 开始事务
        TransactionStatus status = transactionManager.getTransaction(def);
        
        try {
            // 在事务中执行数据库操作
            jdbcTemplate.update("INSERT INTO my_table (name, age) VALUES (?, ?)", "Alice", 25);
            
            // 提交事务
            transactionManager.commit(status);
        } catch (Exception ex) {
            // 回滚事务
            transactionManager.rollback(status);
        }
    }
}

  在这个示例代码中,我们使用了DefaultTransactionDefinition来定义了事务的属性,然后使用 PlatformTransactionManager来开启、提交、回滚事务,并使用JdbcTemplate来执行数据库操作。

  接下来,我们来对以上的示例代码进行进一步的解释:

  1.@Autowired 注解用于自动注入JdbcTemplate和PlatformTransactionManager对象,这些对象需要在 Spring 的配置文件中进行配置。

  2.我们使用 DefaultTransactionDefinition 来定义事务的属性。在这个示例代码中,我们将隔离级别设置为 ISOLATION_READ_COMMITTED,表示读已提交的数据,将传播行为设置为 PROPAGATION_REQUIRED,表示如果当前已经存在事务,则加入该事务中,否则创建一个新的事务。我们还将事务超时时间设置为 30 秒,并将只读属性设置为 false。

  3.我们通过调用transactionManager.getTransaction(def) 方法来开启事务,并将返回的TransactionStatus 对象保存在status变量中。如果事务开启成功,则status对象的isCompleted()方法返回false。

  4.在事务中,我们使用JdbcTemplate来执行数据库操作。在这个示例代码中,我们向一个名为 my_table的表中插入一条数据。

  5.如果在事务中发生异常,我们将通过调用transactionManager.rollback(status)方法来回滚事务。如果事务已经提交,则该方法将不起作用。

  6.如果在事务中没有发生异常,我们将通过调用transactionManager.commit(status)方法来提交事务。

  通过使用Spring的事务管理接口,我们可以很方便地管理事务,从而保证数据的一致性和完整性。

分享到:
在线咨询 我要报名
和我们在线交谈!