【web】Spring中使用DataSourceTransactionManager手动提交或回滚事务
2018-01-08 19:45
525 查看
在使用spring进行web开发时,虽然spring提供的注解方式可以方便的处理很多原来需要手动提交或回滚的事务,但是注解方式有自己使用的局限,比如在类的内部调用方法时,注解方式处理的事务就无法被触发,此时可能需要手动处理相关数据库的事务。本文记录在spring开发时使用Spring提供的DataSourceTransactionManager进行事务提交或回滚处理。主要步骤如下:
@Autowired
// @Qualifier("transactionManager")
private DataSourceTransactionManager transactionManager; DataSourceTransactionManager的创建就不在这里描述了;
public void updateDatabase(CertificateRegisteRequest request,
final CertificateRegisteResponse response) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def); // get
try {
if (logger.isDebugEnabled()) {
logger.debug("request=" + request.toString());
logger.debug("response=" + response.toString());
}
//do some things.
//.............................................
// commit.
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
}
1、注入DataSourceTransactionManager
在java对象中注入DataSourceTransactionManager对象,如使用如下注解方式注入:@Autowired
// @Qualifier("transactionManager")
private DataSourceTransactionManager transactionManager; DataSourceTransactionManager的创建就不在这里描述了;
2、事务处理
手动开启事务,捕获异常,手动提交或回滚事务,示例代码如下:public void updateDatabase(CertificateRegisteRequest request,
final CertificateRegisteResponse response) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def); // get
try {
if (logger.isDebugEnabled()) {
logger.debug("request=" + request.toString());
logger.debug("response=" + response.toString());
}
//do some things.
//.............................................
// commit.
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
}
相关文章推荐
- Spring中使用DataSourceTransactionManager进行事务管理的xml配置
- 0045 Spring中使用DataSourceTransactionManager进行事务管理的xml配置
- Instance Nine:使用Transaction(事务) 手动提交,自动回滚
- 【Spring】20、使用TransactionSynchronizationManager在spring事务提交之后进行一些操作。
- Spring如何设置让事务自动提交和回滚?Spring两种事务管理方式的配置及使用
- 使用事务实现--转账问题:从0001账户转1000块到0002账户。打开"隐式事务":设置为开,删除表中数据,回滚!(默认情况为关,如果打开了则不自动提交,学要手动提交)
- 使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。
- SpringMVC 事务管理(DataSourceTransactionManager)spring的相关配置
- spring数据源的注入、JdbcTemplate管理、编程式的事务管理DataSourceTransactionManager
- 使用Spring(13)Spring与MyBatis整合(二)DataSourceTransactionManage把事务控制在Service层
- 手动提交事务和回滚的使用典例
- Spring 事务管理 DataSourceTransactionManager 和 DataSourceTransactionManager
- 【Oracle】使用bbed手动提交事务
- 使用spring手动控制事务
- Spring声明式事务之MathAlwaysTransactionAtttirbuteSource使用
- Spring全局事务之WebLogicJtaTransactionManager
- 使用spring实现事务管理(@transactional)的遇到的两个异常:java.lang.noclassdeffounderror:org/objectweb.asm
- [spring,mysql] spring使用注解式事务声明(@Transactional)无法回滚 .
- 使用SpringMVC+mybatis+事务控制+JSON 配置最简单WEB