spring中编程式事务控制

step1:配置xml文件

 1 <!-- 事务管理bean -->
 2   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 3     <property name="dataSource" ref="dataSource" />
 4   </bean>
 5
 6     <bean id="transactionTemplate"
 7           class="org.springframework.transaction.support.TransactionTemplate">
 8         <property name="transactionManager">
 9             <ref bean="transactionManager"/>
10         </property>
11     </bean>
12
13   <!-- 对@Transactional这个注解进行的驱动,这是基于注解的方式使用事务配置声明 -->
14   <tx:annotation-driven transaction-manager="transactionManager" />

step2:自动注入TransactionTemplate对象

1 import org.springframework.transaction.support.TransactionTemplate;
2 @Autowired
3 private TransactionTemplate transactionTemplate;

step3:使用execute方法对事务进行管理

1 transactionTemplate.execute(new TransactionCallbackWithoutResult() {
2
3                 @Override
4                 protected void doInTransactionWithoutResult(TransactionStatus arg0) {
5                     String s = userService.newUser(user,currentUserId);
6                     User newUser=userService.getUser(user.getUsername());
7                     roleService.createRoleUser(newUser.getUserId(), rolesId);
8                 }
9             });

完整流程如下:

 1 package com.superb.mips.terminal.rest.controller;
 2
 3 import java.util.HashMap;
 4
 5 import org.apache.commons.lang3.StringUtils;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.stereotype.Controller;
 8 import org.springframework.transaction.TransactionStatus;
 9 import org.springframework.transaction.annotation.Transactional;
10 import org.springframework.transaction.support.TransactionCallbackWithoutResult;
11 import org.springframework.transaction.support.TransactionTemplate;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.bind.annotation.ResponseBody;
14
15 import com.superb.mips.system.domain.User;
16 import com.superb.mips.system.service.inf.RoleService;
17 import com.superb.mips.system.service.inf.UserService;
18
19
20 @Controller
21 @RequestMapping("api/users")
22 public class RestUserController {
23     @Autowired
24     private UserService userService;
25     &orgName=中国移动&orgId=1
26     @Autowired
27     private RoleService roleService;
28     @Autowired
29     private TransactionTemplate transactionTemplate;
30
31     @RequestMapping(value = "/createUsers.json")
32     @ResponseBody
33     @Transactional
34     public HashMap<String, Object> createUser(final User user,final int currentUserId,final String rolesId) {
35         HashMap<String, Object> map = new HashMap<String, Object>();
36         String[] strAry=rolesId.split(",");
37         if(strAry.length==0){
38             map.put("result", 1);
39             map.put("description", "请绑定角色");
40             return map;
41         }else{
42             for(int i=0;i<strAry.length;i++){
43                 try {
44                     Integer.parseInt(strAry[i]);
45                 } catch (Exception e) {
46                     map.put("result", 2);
47                     map.put("description", "请绑定正确的角色id");
48                     return map;
49                 }
50             }
51         }
52         try {
53             transactionTemplate.execute(new TransactionCallbackWithoutResult() {
54
55                 @Override
56                 protected void doInTransactionWithoutResult(TransactionStatus arg0) {
57                     String s = userService.newUser(user,currentUserId);
58                     User newUser=userService.getUser(user.getUsername());
59                     roleService.createRoleUser(newUser.getUserId(), rolesId);
60                 }
61             });
62             map.put("result", 0);
63             map.put("description", "新增用户成功。");
64         } catch (Exception e) {
65             map.put("result", 3);
66             map.put("description", "新增用户失败!");
67         }
68
69         return map;
70     }
71 }

原文地址:https://www.cnblogs.com/s-d-g/p/8630014.html

时间: 2024-11-10 13:53:09

spring中编程式事务控制的相关文章

全面分析 Spring 的编程式事务管理及声明式事务管理--转

开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解.您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等.本文将直接使用这些概念而不做详细解释.另外,您最好掌握数据库的基础知识,虽然这不是必须. 系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带

分析 Spring 的编程式事务管理及声明式事务管理(转)

开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解.您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等.本文将直接使用这些概念而不做详细解释.另外,您最好掌握数据库的基础知识,虽然这不是必须. 系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带

Spring的编程式事务和声明式事务

事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性. Spring事务管理的两种方式 spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务管理,spring推荐使用TransactionTemplate. 声明式事务是建立在AOP之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法

Spring 的编程式事务管理及声明式事务管理

本文将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. Spring 事务属性分析 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保

全面分析 Spring 的编程式事务管理及声明式事务管理

转自:http://www.open-open.com/lib/view/open1414310646012.html 关于本教程 本教程将深切讲授 Spring 庞杂而丁壮夜的事务治理功用,包括编程式事务和声明式事务.经由进程对本教程的进修,您将可以理解 Spring 事务治理的实质,并无邪运用之. 先决前提 本教程假定您已掌控了 Java 根蒂根抵常识,并对 Spring 有一定意见.您还需求具有根抵的事务治理的常识,好比:事务的界说,隔离级其他概念,等等.本文将直接行使这些概念而不做具体正

Spring笔记(四): spring的编程式事务与声明式事务

一.Spring 事务属性分析 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失. 在 Spring 中,事务是通过 TransactionDefinition 接口来定义的.该接口包含与事务属性有关的方法.在

阶段3 2.Spring_10.Spring中事务控制_9 spring编程式事务控制1-了解

编程式的事物控制,使用的情况非常少,主要作为了解 新建项目 首先导入包坐标 复制代码 这里默认值配置了Service.dao和连接池其他的内容都没有配置 也就说现在是没有事物支持的.运行测试文件 有错误,但是金额还是被减去了 编码的方式加事务控制 事务控制都离不开提交和回滚这两个操作.在spring里面它吧提交和回滚的方法提交到事务管理器里面了. 于是我们无论如何都需要在bean.xml里面配置事务管理器 接下来要进行事务控制,那肯定需要提交和回滚的操作 spring提交了一个对象,叫做事务模板

阶段3 2.Spring_10.Spring中事务控制_10spring编程式事务控制2-了解

在业务层声明 transactionTemplate 并且声称一个set方法等着spring来注入 在需要事物控制的地方执行 execute.但是这个execute需要一个参数 需要的参数是TransactionCollback但是这个是一个接口.想用的话就需要找他它的实现类 这里不找实现类,就写匿名内部类 生成未实现的方法.生成的方法就叫做doInTransaction 就可以把我们的主要代码挪进来 这样涉及到事务提交的地方.都需要代码加在transactionTemplate的execute

(转)Spring的编程式事务例子

纯JDBC操作, 对某些项目来说, 也许更好, Spring JDBC Framework让你不用关心Connection, Statement, ResultSet. 定义数据源 spring事务编程的例子<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> spring事务编程的例子 <property name="jndiName&