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() { // 在此次执行事物提交后调用 } }); } }

浙公网安备 33010602011771号