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);
}

这是在有 ApplicationContext 的情况下、

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 手动 提交事务的更多相关文章

  1. Spring 手动提交事务

    在使用Spring声明式事务时,不需要手动的开启事务和关闭事务,但是对于一些场景则需要开发人员手动的提交事务,比如说一个操作中需要处理大量的数据库更改,可以将大量的数据库更改分批的提交,又比如一次事务 ...

  2. Spring手动提交事务

    // name的值根据spring配置文件的事物管理器的id而定 @Resource(name="transactionManager") private DataSourceTr ...

  3. Java中手动提交事务

    项目中遇到一个问题,就是在程序的执行过程中需要不断地更新某个信息,但是在springmvc中好像是默认不可以的,那么就需要手动提交 // 从spring容器对象中获取DataSourceTransac ...

  4. mysql中,手动提交事务

    1: 在mysql中,手动提交事务的案例:CREATE PROCEDURE tfer_funds       (from_account int, to_account int, tfer_amoun ...

  5. (后端)Spring手动回滚事务

    百度上查资料获得的 throw new RuntimeException(); 或者  TransactionAspectSupport.currentTransactionStatus().setR ...

  6. spring手动配置

    本文总结自:https://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分配置,但是对于一些特定的情况,还是需要我们进行手动配置的. ...

  7. 使用spring手动获取Bean的时候,不能强转回它自己。

    这个问题好像有点长,描述一下: 就是通过类名的方式获取Bean后,得到一个Object对象,但是这个Object不能再强转回Bean了.抛出的异常时类型转换异常.  java.lang.ClassCa ...

  8. springboot 开启事务以及手动提交事务

    添加依赖,sprongboot 会默认开启事务管理 org.springframework.boot spring-boot-starter-jdbc 在需要的服务类里添加注解 @Autowired ...

  9. 【Oracle】使用bbed手动提交事务

    有时候数据库挂掉,起库会出现ORA-00704错误,而导致ORA-00704错误的根本原因是訪问OBJ$的时候.ORACLE须要回滚段中的数据,而訪问回滚段的时候须要的undo数据已经被覆盖,此时我们 ...

随机推荐

  1. Windows如何后台运行bat文件(没有命令提示符框)

    怎么让bat文件在后台无声无息无影无形地运行呢? 用start/min命令去运行bat文件,电脑的任务栏下仍然会有相关的图标,以下的办法可以达到目的. 方法一: bat里有隐藏窗口的命令,很简单,只需 ...

  2. 理解 with递归调用 Sqlserver 树查询

    --with用法 --可以这么理解 with SQL语句变量或者叫临时表名 as( SQL语句 ) select * from SQL语句变量或者叫临时表名 --递归调用 with CTE as( s ...

  3. SQL Server Url Decode函数

    )) ) AS BEGIN ), ), ) SET @count = Len(@url) SET @urlReturn = '' WHILE (@i <= @count) BEGIN ) IF ...

  4. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  5. Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

    转自:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 很多人面试肯定都被问到过,请问Android中的 ...

  6. PHP轻量级框架 Slim 使用(一)

    安装参照文档:https://wizardforcel.gitbooks.io/slim3-doc/content/1.html 项目目录 其中主要业务操作在app目录中完成,可根据需求划分 我这里分 ...

  7. [转]使用STM32CubeMX:USB大容量存储设备

    原文地址http://qiita.com/mt08/items/fcc925fa47726bfc6c74 概要 STM32CubeMXを使って.USB MassStorageを使ってみる. USBを使 ...

  8. web API的概念

    11月20日 纷乱的术语 接口:从接口测试说起,接口是某个对象和外界交互的部分,应用程序可能有很多接口. 用户界面UI(user interface) 消息交互接口,外界是其他程序:diameter, ...

  9. Dubbo 暴露服务

    1. 引入dubbo依赖 dubbo 依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId&g ...

  10. 深度学习原理与框架-神经网络架构 1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差) 4.dropout(防止过拟合操作)

    神经网络构架:主要时表示神经网络的组成,即中间隐藏层的结构 对图片进行说明:我们可以看出图中的层数分布: input layer表示输入层,维度(N_num, input_dim)  N_num表示输 ...