Spring 手动 提交事务
1、配置文件 applicationContext.xml:
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
2、在需要加事务的方法上加上
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx
.getBean("txManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
try {
//逻辑代码,可以写上你的逻辑处理代码
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
3. ApplicationContext 不存在的情况下
@Autowired
private DataSourceTransactionManager txManager;
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔离级别,开启新事务
TransactionStatus status = txManager.getTransaction(def); // 获得事务状态
try{
//逻辑代码,可以写上你的逻辑处理代码
txManager.commit(status);
}catch(Exception e){
txManager.rollback(status);
}
3. Spring声明式事务配置
<!-- 事务配置 spring 3.0 -->
<beanid="transactionManager class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="dataSource"/>
</bean>
<aop:config>
<aop:pointcutexpression="execution(public * com.*.service.impl.*Impl.*(..))"id="pointcut"/>
<aop:advisoradvice-ref="txAdvice"pointcut-ref="pointcut"/>
</aop:config>
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
<tx:attributes>
<tx:methodname="query*"propagation="REQUIRED"read-only="true"/>
<tx:methodname="find*"propagation="REQUIRED"read-only="true"/>
<tx:methodname="get*"propagation="REQUIRED"read-only="true"/>
<tx:methodname="save*"propagation="REQUIRED"/>
<tx:methodname="add*"propagation="REQUIRED"/>
<tx:methodname="create*"propagation="REQUIRED"/>
<tx:methodname="delete*"propagation="REQUIRED"/>
<tx:methodname="del*"propagation="REQUIRED"/>
<tx:methodname="remove*"propagation="REQUIRED"/>
<tx:methodname="modify*"propagation="REQUIRED"/>
<tx:methodname="update*"propagation="REQUIRED"/>
<tx:methodname="clear*"propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
在使用Spring声明式事务时,不需要手动的开启事务和关闭事务,但是对于一些场景则需要开发人员手动的提交事务,比如说一个操作中需要处理大量的数据库更改,可以将大量的数据库更改分批的提交,又比如一次事务中一类的操作的失败并不需要对其他类操作进行事务回滚,就可以将此类的事务先进行提交,这样就需要手动的获取Spring管理的Transaction来提交事务。
1、applicationContext.xml配置
1 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
2 <property name="dataSource" ref="dataSource" />
3 </bean>
4
5 <tx:advice id="txAdvice" transaction-manager="transactionManager">
6 <tx:attributes>
7 <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
8 <tx:method name="find*" read-only="true" propagation="SUPPORTS" />
9 <tx:method name="get*" read-only="true" propagation="SUPPORTS" />
10 <tx:method name="select*" read-only="true" propagation="SUPPORTS" />
11 <tx:method name="list*" read-only="true" propagation="SUPPORTS" />
12 <tx:method name="load*" read-only="true" propagation="SUPPORTS" />
13 </tx:attributes>
14 </tx:advice>
15
16 <aop:config>
17 <aop:pointcut id="servicePointCut" expression="execution(* com.xxx.xxx.service..*(..))" />
18 <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut" />
19 </aop:config>
2、手动提交事务
1 @Resource(name="transactionManager")
2 private DataSourceTransactionManager transactionManager;
3
4 DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition();
5 //开启新事物
6 transDefinition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
7 TransactionStatus transStatus = transactionManager.getTransaction(transDefinition);
8 try {
9 //TODO
10 transactionManager.commit(transStatus);
11 } catch (Exception e) {
12 transactionManager.rollback(transStatus);
13 }
Spring 手动 提交事务的更多相关文章
- Spring 手动提交事务
在使用Spring声明式事务时,不需要手动的开启事务和关闭事务,但是对于一些场景则需要开发人员手动的提交事务,比如说一个操作中需要处理大量的数据库更改,可以将大量的数据库更改分批的提交,又比如一次事务 ...
- Spring手动提交事务
// name的值根据spring配置文件的事物管理器的id而定 @Resource(name="transactionManager") private DataSourceTr ...
- Java中手动提交事务
项目中遇到一个问题,就是在程序的执行过程中需要不断地更新某个信息,但是在springmvc中好像是默认不可以的,那么就需要手动提交 // 从spring容器对象中获取DataSourceTransac ...
- mysql中,手动提交事务
1: 在mysql中,手动提交事务的案例:CREATE PROCEDURE tfer_funds (from_account int, to_account int, tfer_amoun ...
- (后端)Spring手动回滚事务
百度上查资料获得的 throw new RuntimeException(); 或者 TransactionAspectSupport.currentTransactionStatus().setR ...
- spring手动配置
本文总结自:https://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分配置,但是对于一些特定的情况,还是需要我们进行手动配置的. ...
- 使用spring手动获取Bean的时候,不能强转回它自己。
这个问题好像有点长,描述一下: 就是通过类名的方式获取Bean后,得到一个Object对象,但是这个Object不能再强转回Bean了.抛出的异常时类型转换异常. java.lang.ClassCa ...
- springboot 开启事务以及手动提交事务
添加依赖,sprongboot 会默认开启事务管理 org.springframework.boot spring-boot-starter-jdbc 在需要的服务类里添加注解 @Autowired ...
- 【Oracle】使用bbed手动提交事务
有时候数据库挂掉,起库会出现ORA-00704错误,而导致ORA-00704错误的根本原因是訪问OBJ$的时候.ORACLE须要回滚段中的数据,而訪问回滚段的时候须要的undo数据已经被覆盖,此时我们 ...
随机推荐
- CSS3帧动画
在前面的文章中也有介绍过css3动画的内容,可见<关于transition和animation>和<webkitAnimationEnd动画事件>,今天又要唠叨一下这个东西了, ...
- pip 国内源
pip install django -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com pip in ...
- <转载> MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm
当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这 ...
- Python常用时间操作总结【取得当前时间、时间函数、应用等】转载
Python常用时间操作总结[取得当前时间.时间函数.应用等] 转载 2017-05-11 作者:清风乐逍遥 我要评论 这篇文章主要介绍了Python常用时间操作,包括取得当前时间.时间函 ...
- Linux下安装FTP服务(Ubuntu)
在Ubuntu 14.04 上安装 FTP 服务 第一步>>更新库 linuxidc@linuxidc:~$ sudo apt-get update 第二步>>采用如下命令安装 ...
- 玩转音频、视频的利器:FFmpeg
导语 当下直播平台发展十分迅猛,依靠游戏内直播平台的发展带动游戏活跃提升收入,那么对于我们开发来说如何玩转视频呢?下面就来介绍一个音频.视频处理利器——FFmpeg. FFmpeg 简介 FFmpeg ...
- 试用bus hound来分析STM32CubeMX来生成USB_HID_Mouse工程
Bus Hound (x64). Complements of www.perisoft.net STM32_HID_mouse Device - Device ID (followed by the ...
- DataSnap Server 客户端调用 异常
No peer with the interface with guid {9BB0BE5C-9D9E-485E-803D-999645CE1B8F} has been registered.
- 【JEECG技术文档】JEECG部门管理员操作手册
功能介绍 使用部门管理员设置需要完成以下步骤: 1. 在“部门管理员设置”菜单配置权限以及分配管理员. 2. 在“部门角色管理”菜单配置角色,以及权限. 3. 在“部门用户角色授权”菜单分配角色到哪个 ...
- Java基础之用记事本编辑java代码运行,并且打成jar包后运行
使用记事本写java代码 1.在d盘新建一个记事本,名字叫做zhanzhuang.java,会询问不可用,是否继续,点击是 2.在里面编辑就如下内容,注意文件的名字要和 class 后面的名字相对应 ...