spring事物

一:spring编程式事物

1.1:spring事物的基本对象

1、spring事物管理器PlatformTransactionManager

org.springframework.transaction.PlatformTransactionManager

 

2、事物属性类TransactionDefinition

org.springframework.transaction.TransactionDefinition

 

3、TransactionStatus

org.springframework.transaction.TransactionStatus

 

1.2:spring事物基本对象的应用

 

1.3:使用PlatformTransactionManager实现编程式事物

 

package com.hdx.common.hdxspringinit.transcation;

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

@Service
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // 现在配置实现类:org.springframework.jdbc.datasource.DataSourceTransactionManager   xml的id配置transactionManager
    @Autowired
    private PlatformTransactionManager transactionManager;

    public void transfer() {
        // 1、定义事物属性对象
        DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
        // 定义事物超时时间
        transactionDefinition.setTimeout(120);
        // 事物的传播性 数字org.springframework.transaction.TransactionDefinition中的变量值
        //transactionDefinition.setPropagationBehavior();
        // 事物的传播性 变量名org.springframework.transaction.TransactionDefinition中的变量名称
        transactionDefinition.setPropagationBehaviorName("PROPAGATION_REQUIRED");
        // 定义事物传播性
        TransactionStatus status = transactionManager.getTransaction(transactionDefinition);
        try {
            jdbcTemplate.execute("执行sql");
            if (status.isRollbackOnly()) {
                transactionManager.rollback(status);
            } else {
                transactionManager.commit(status);
            }
        }catch (Exception exception) {
            transactionManager.rollback(status);
        }

    }



}

 

1.4:使用TransactionTemplate实现编程式事物

package com.hdx.common.hdxspringinit.transcation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

@Service
public class UserService2 {

    @Autowired
    private JdbcTemplate jdbcTemplate;


    // 默认执行提交操作
    @Autowired
    private TransactionTemplate transactionTemplate;

    public void transfer() {

        // 无返回值的使用
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                try {
                    jdbcTemplate.execute("执行sql");
                }catch (Exception exception) {
                    // 设置回归事物
                    transactionStatus.setRollbackOnly();
                    exception.printStackTrace();
                }
            }
        });

    }

    public void transfer2() {
        // 有回值的使用
        Object result = transactionTemplate.execute(new TransactionCallback<Object>() {
            @Override
            public Object doInTransaction(TransactionStatus transactionStatus) {
                try {
                    jdbcTemplate.execute("执行sql");
                }catch (Exception exception) {
                    // 设置回归事物
                    transactionStatus.setRollbackOnly();
                    exception.printStackTrace();
                }
                return null;
            }
        });

    }



}

 二:spring注解事物

 

三:其他应用

参考:https://blog.csdn.net/qq_26400953/article/details/107361086

3.1:TransactionSynchronizationManager

我们在事务执行前后可能需要做一些额外的操作这个时候我们就需要用到TransactionSynchronizationManager去注入一个TransactionSynchronization事务同步器,然后重写TransactionSynchronization或者其子类的beforeCommit()或者afterCommit()方法,写入我们需要执行的业务。

import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;

public class TransactionSynchronizationManagerTest {

    public static void main(String[] args) {
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {

            @Override
            public void beforeCommit(boolean readOnly) {
                // 在此次执行事物提交前调用
            }

            @Override
            public void afterCommit() {
                // 在此次执行事物提交后调用
            }
        });
    }
}

 

posted @ 2022-07-03 14:51  银河系的极光  阅读(79)  评论(0)    收藏  举报