spring事务管理,不回滚,demo测试出bug(很简单demo,耽误大佬们,30s)

我做了一个demo来测试关于spring事务回滚的功能,运用的是Jdbctemplate来写的,很简单,注释也加了,就是不太清楚事务为什么不回滚?
代码如下:
applicationContext配置文件代码

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/aop
                           http://www.springframework.org/schema/aop/spring-aop.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/tx
                           http://www.springframework.org/schema/tx/spring-tx.xsd">


    <!--开始注释扫描-->
    <context:component-scan base-package="org.berg.demo5"/>

    <!-- 引入数据库连接属性配置文件 -->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:database.properties" />
    </bean>
    <!--使用dbcp的数据库的操作文件-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- jdbc事务管理器 -->
    <bean id="txManager"   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 2、注释模式事务:启动使用注解实现声明式事务管理的支持   -->
    <tx:annotation-driven transaction-manager="txManager" />
</beans>

DAO层代码

public class UserDaoImpl implements  UserDao {

    @Override
    @Transactional(rollbackFor=Exception.class)
    public void out(String outer, int money) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext4.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");
        String usql = "update account set money  = money -"+money+" where username='"+outer+"'";
        jdbcTemplate.execute(usql);
    }

    @Override
    @Transactional(rollbackFor=Exception.class)
    public void in(String inner, int money) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext4.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");
        String usql = "update account set money = money + "+money+" where username ='"+inner+"'";
        jdbcTemplate.execute(usql);
    }
}

Service层

    @Autowired
    private UserDao userDao;


    @Override
    @Transactional(rollbackFor=Exception.class)
    public void transfer(String outer, String inner, int money) {
            userDao.out(outer, money);
            int i=1/0;
            userDao.in(inner, money);
    }

Test代码

 public class Test {


    @Autowired
    AccountService accountService;

    @org.junit.Test
    public void Test(){
        ApplicationContext ss= new ClassPathXmlApplicationContext("classpath:applicationContext4.xml");
        AccountService as= (AccountService) ss.getBean("AccountServiceImpl");
        //Tom 向 Marry 转账1000
        as.transfer("Tom", "tony", 1000);   }
}

4个回答

数据库本身支持回滚吗?mysql的话要InnoDB才支持回滚

@Transactional注解事务不起作用的话有多种可能,

是否开启了对注解的解析,你已经写了 这个就pass了,
下一个数据库引擎要支持事务, 如果是mysql数据库的话,如果使用的是myisam,事务是不起作用的,可以改为innodb

应该还要配置切入点把。

qq_16127313
爱码少年 非AOP事务,无需配置切点
12 个月之前 回复

几点:
1. DAO 无需配置事务注解
2. 上下文无需重复手工加载

可以改成这样测试看看

@Repository
 public class UserDaoImpl implements  UserDao {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void out(String outer, int money) {
        String usql = "update account set money  = money -"+money+" where username='"+outer+"'";
        jdbcTemplate.execute(usql);
    }

    @Override
    @Transactional(rollbackFor=Exception.class)
    public void in(String inner, int money) {         
        String usql = "update account set money = money + "+money+" where username ='"+inner+"'";
        jdbcTemplate.execute(usql);
    }
}

还有问题的话,可以跟我讨论.

回答完毕,希望帮到你!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring事务管理Demo
Spring事务管理Demo
spring事务管理不回滚,求教
我在一个service里调用了两次dao插入两条记录,第二次调用dao是会抛出异常的,按道理不是整个service里的dao操作都要回滚的,可是查询数据库第一条却插入成功了,改如何配置才能保证“要么都成功,要么都失败”rnapplicationContext.xmlrn[code=html]rnrnrnrn rn rnrn rnrn rn rnrn rn rn rn rn rn rn rnrn rn rn rn rnrn rn rn rn rn rn rn rn rnrn rn rn rn rn rn rn rn rnrn[/code]rnjdbc.propertiesrn[code=text]rnjdbc.driverClassName=oracle.jdbc.driver.OracleDriverrnjdbc.url=jdbc\:oracle\:thin\:@192.168.0.76\:1521\:WQZSrnjdbc.username=test01rnjdbc.password=test01rn[/code]rnrnspring-servlet.xmlrn[code=html]rnrnrn rn rn rn rn rnrn rn rnrn rn rn rn rnrn[/code]rnrn以上是配置文件rn==============================================================================rnLoginAction.javarn[code=java]rnpackage com.osmond.action;rnimport javax.annotation.Resource;rnimport javax.servlet.http.HttpServletRequest;rnimport javax.servlet.http.HttpServletResponse;rnrnimport org.springframework.stereotype.Controller;rnimport org.springframework.web.bind.annotation.RequestMapping;rnrnimport com.osmond.service.LoginService;rnrn@Controllerrnpublic class LoginAction rnrn @Resourcern private LoginService loginService;rn @RequestMapping(value = "/login.action")rn public void test(HttpServletRequest request, HttpServletResponse response)rn try rn loginService.saveUser("U000000000000002", "P123456");rn catch (Exception e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn rnrn[/code]rnrnLoginService.javarn[code=java]rnpackage com.osmond.service;rnrnimport javax.annotation.Resource;rnrnimport org.springframework.stereotype.Service;rnrnimport com.osmond.dao.LoginDao;rnrn@Service("loginService")rnpublic class LoginService rnrn @Resourcern private LoginDao loginDao;rn rn public boolean saveUser(String u,String p) throws RuntimeExceptionrn boolean res=false;rn try rn res = loginDao.saveUser(u, p);rn res = loginDao.saveUser(u+"000000000000000000000000000000000", p);//长度超出32位rn rn catch (Exception e) rn // TODO Auto-generated catch blockrn throw new RuntimeException();rn rn return res;rn rn rn rnrn[/code]rnrnLoginDao.javarn[code=java]rnpackage com.osmond.dao;rnrnimport javax.annotation.Resource;rnimport javax.sql.DataSource;rnrnimport org.springframework.jdbc.core.support.JdbcDaoSupport;rnimport org.springframework.stereotype.Repository;rnrn@Repository("loginDao")rnpublic class LoginDao extends JdbcDaoSupportrn rn @Resource(name = "dataSource")rn private void setMyJdbcTemplate(DataSource dataSource) rn super.setDataSource(dataSource); rn rn rn public boolean saveUser(String u,String p)rn String sql = "insert into T_USER_INFO(USERNAME,PASSWORD) VALUES(?,?)";rn int res = getJdbcTemplate().update(sql, new Object[]u,p);rn return res>0;rn rnrnrn[/code]rnrn数据表T_USER_INFO表结构rn[code=sql]rncreate table T_USER_INFOrn(rn id VARCHAR2(32) default sys_guid() not null,rn username VARCHAR2(32),rn password NVARCHAR2(32)rn)rn[/code]rnrn访问localhost:8080/login.action后查询数据表T_USER_INFO表,成功插入一条记录。怎么才能“要么两条都插入,要么都不插入”呢 ?
Spring 事务管理,事物不回滚
测试类: rnpackage com.demo.test; rnrnimport javax.annotation.Resource; rnrnimport org.junit.Test; rnimport org.junit.runner.RunWith; rnimport org.springframework.test.context.ContextConfiguration; rnimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner; rnrnimport com.demo.entity.DLog; rnimport com.demo.entity.User; rnimport com.demo.service.LogService; rnimport com.demo.service.UserService; rnrn@RunWith(SpringJUnit4ClassRunner.class) rn@ContextConfiguration(locations = "../../../applicationContext.xml" ) rnpublic class DemoTest rnrn@Resource rnUserService userService; rn@Resource rnLogService logService; rnrn@Test rnpublic void testUserService() rnDLog dLog = new DLog("saved!"); rnlogService.add(dLog); rnUser user = new User(); rnuser.setUserId(1); rn//这里删除的时候 我设定了一个不存在的值 删除不成功 抛出异常 但是第一个logService.add(dLog); rn志 已经插入了,并且没有回滚 rnuserService.delete(user); rn rnrnrnspring配置文件: rnrn rnorg.hibernate.dialect.MySQLDialect rnupdatetruecom.demo.entity rnrnrnlogDao: rnrnpackage com.demo.daoimpl; rnrnimport javax.annotation.Resource; rnrnimport org.apache.commons.logging.Log; rnimport org.apache.commons.logging.LogFactory; rnimport org.hibernate.Session; rnimport org.hibernate.SessionFactory; rnimport org.springframework.dao.DataAccessException; rnimport org.springframework.orm.hibernate3.support.HibernateDaoSupport; rnimport org.springframework.stereotype.Repository; rnrnimport com.demo.dao.LogDao; rnimport com.demo.dao.UserDao; rnimport com.demo.entity.DLog; rnimport com.demo.entity.User; rnrn@Repository rnpublic class LogDaoImpl implements LogDao rnrnLog log = LogFactory.getLog(LogDaoImpl.class); rn@Resource rnSessionFactory sessionFactory; rnrnpublic void add(DLog dLog) rnSession session = sessionFactory.getCurrentSession(); rnsession.save(dLog); rn rnrnpublic void delete(DLog dLog) rnSession session = sessionFactory.getCurrentSession(); rnsession.delete(dLog); rn rn rnrnuserDao: rnrnpackage com.demo.daoimpl; rnrnimport javax.annotation.Resource; rnrnimport org.apache.commons.logging.Log; rnimport org.apache.commons.logging.LogFactory; rnimport org.hibernate.Session; rnimport org.hibernate.SessionFactory; rnimport org.springframework.dao.DataAccessException; rnimport org.springframework.orm.hibernate3.support.HibernateDaoSupport; rnimport org.springframework.stereotype.Repository; rnrnimport com.demo.dao.UserDao; rnimport com.demo.entity.User; rnrn@Repository rnpublic class UserDaoImpl implements UserDao rnrnLog log = LogFactory.getLog(UserDaoImpl.class); rn@Resource rnSessionFactory sessionFactory; rnrnpublic void add(User user) rnSession session = sessionFactory.getCurrentSession(); rnsession.save(user); rn rnrnpublic void delete(User user) rnSession session = sessionFactory.getCurrentSession(); rnsession.delete(user); rn rn rnrnlogService: rnrnimport javax.annotation.Resource; rnrnimport org.springframework.stereotype.Component; rnimport org.springframework.stereotype.Service; rnimport org.springframework.transaction.annotation.Propagation; rnimport org.springframework.transaction.annotation.Transactional; rnrnimport com.demo.dao.LogDao; rnimport com.demo.dao.UserDao; rnimport com.demo.entity.DLog; rnimport com.demo.entity.User; rnimport com.demo.service.LogService; rnimport com.demo.service.UserService; rnrn@Service rn@Transactional rnpublic class LogServiceImpl implements LogService rnrn@Resource rnLogDao logDao; rnrn@Transactional() rnpublic void add(DLog dLog) rnlogDao.add(dLog); rn rnrn@Transactional() rnpublic void delete(DLog dLog) rnlogDao.delete(dLog); rn rn rnrnuserService: rnrnpackage com.demo.serviceimpl; rnrnimport javax.annotation.Resource; rnrnimport org.springframework.stereotype.Component; rnimport org.springframework.stereotype.Service; rnimport org.springframework.transaction.annotation.Propagation; rnimport org.springframework.transaction.annotation.Transactional; rnrnimport com.demo.dao.UserDao; rnimport com.demo.entity.User; rnimport com.demo.service.UserService; rnrn@Service rn@Transactional rnpublic class UserServiceImpl implements UserService rnrn@Resource rnUserDao userDao; rnrn@Transactional() rnpublic void add(User user) rnuserDao.add(user); rn rnrn@Transactional() rnpublic void delete(User user) rnuserDao.delete(user); rn rnrnrn
spring事务管理不会回滚
spring + hibernate , 弄了半天,还是不会回滚,哪位大虾帮帮忙rn下面是配置事物的部分xmlrnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnrn这个是我要拦截的方法rnpublic void doSomething() throws RuntimeExceptionrn User user1 = new User();rn user1.setName("测试1");rn user1.setPassword("123");rn userDao.insertUser(user1);rn rn User user2 = new User();rn user2.setName("测试2");rn user2.setPassword("123");rn userDao.insertUser(user2);rn rn throw new RuntimeException("例外");rn rn rn不知道为什么不会回滚
spring声明事务管理不起作用 不回滚
是因为使用的springMVC和spring对注解的扫描冲突 所以要区别开 springmvc提前注册了service层导致@transaction注解没有起作用 mvc 的只扫描controller组件 注意使用 use-default-filters=&quot;false&quot; 主体的扫描除controller外的所有组件 ...
spring事务管理,碰到异常不回滚!!!
问题是遇到数据库抛出的异常回滚成功,抛出java.lang.ArrayIndexOutOfBoundsException不回滚!!rn编程式事务管理,配置如下:rn[code=XML]rn。。。rn rn rn rn rn rn PROPAGATION_REQUIRED,readOnlyrn PROPAGATION_REQUIRED,readOnlyrn PROPAGATION_REQUIRED,readOnlyrn PROPAGATION_REQUIREDrn PROPAGATION_REQUIREDrn PROPAGATION_REQUIREDrn rn rn rn rn rn rn rn rn rnrn rn rn rn rn rn。。。。。rn[/code]rnrnrn
软件工程师解决测试人员测试出的bug流程
软件工程师在工作过程中,难免要解决软件中的各种bug,但是经常由于各种问题导致一个bug反反复复修改,甚至引出更多的bug。纠其原因,更多的是处理bug过程不规范导致的。笔者总结了工作中遇到bug的处理流程,如下:   一、bug确认 分配到一个bug后,要根据bug单号到bug管理系统查看该bug的详细信息。 1. 查看问题现象,了解问题 2. 查看软件版本和操作流程,检查当前版本和操作...
android和iso APP 测试出bug怎么办?
android和iso APP 测试出bug怎么办?rnrn如果,rnrn公司没有足够的测试人力;rn缺乏能定位bug的测试大神;rn没有足够多的机器做兼容测试;rn压力测试,人力不够,机器也不够;rnrn选择测试外包应该是一个idea吧?rnrn大家一般什么哪家的测试平台呢?
spring 事务管理 手动回滚策略
如果我不用spring的事务代理机制,直接在service代码中进行事务的提交或者回滚处理,那么一般是这样的处理逻辑-->主要有2点:rn即rn1:事务流程中,某一节点的数据(正常返回)遇到某值时,进行回滚,执行结果中说明情况.rn2:事务流程中,try catch 所有的代码-->保证遇到运行时异常,或者error的时候,进行回滚rnrn现在要用spring的事务管理了,导致在处理提到的第一个情况的时候有个问题,不知道如何解决rnrn就是spring所管理到的业务代码方法,必须要抛出指定异常,才可以回滚rnrn那么,如果我在1中的那种情况,如何保证让service方法,既有返回值,又能回滚呢?rnrn
Spring 中 事务管理 的 事务的回滚
关于 声明式事务 配置 的 noRollbackFor  rollbackFor  这两个属性的作用 我感到很困惑? 1. 数据库数据 book_stock数据表 account 数据表 2. 事务方法:
Spring事务管理——回滚(rollback-for)控制
探讨Spring事务控制中,异常触发事务回滚原理。文章进行了6种情况下的Spring事务是否回滚。 以下代码都是基于Spring与Mybatis整合,使用Spring声明式事务配置事务方法。 1.不捕获异常(一般处理方式)代码,其中contentMappger.updateWithErrTest(31L); 是SQL语句错误,用来测试回滚。/** * 删除多条记录 */
spring事务管理在mysql数据库无法回滚
mysql的数据表是有类型的 MyISAM是非事务性表, 把它改成InnoDb类型都就可以回滚了
spring事务管理默认回滚异常
spring事务管理默认回滚异常
Spring+Mybatis 事务管理不回滚的问题
spring-transaction.xmlrn[img=https://img-bbs.csdn.net/upload/201809/20/1537431739_792248.png][/img]rnrnImplrn[img=https://img-bbs.csdn.net/upload/201809/20/1537432033_956636.png][/img]rnrnmapper.xmlrn[img=https://img-bbs.csdn.net/upload/201809/20/1537432061_877861.png][/img]rnrn实在不理解,通过 spring aop 配置了事务,把动态拼接好的sql交给 mybatis 执行就不能执行事务回滚,而最后通过connection 直接运行就可以回滚,为什么呢?
简单 测试出 代码行数
总往txt里写代码rn想实现测试出代码的行数rn函数测出有代码,就n++rnrn格式:chengxu(程序名) a.txt(目录下的txt文件)rnrnrn各位能提及下有什么函数麽rn
Spring MVC Demo 和 JSTL demo
NULL 博文链接:https://helloandy2009.iteye.com/blog/728101
Spring demo
spring demo IOC 和 AOP demo
spring Demo
spring Demo 代码
spring demo
NULL 博文链接:https://kwanchai.iteye.com/blog/707919
spring boot 连接thymeleaf的很简单的Demo
spring boot 连接thymeleaf的很简单的Demo,如有问题,请联系 ,欢迎下载!
【散分加demo】很简单的demo
这里为帖子 [url=http://topic.csdn.net/u/20100724/17/8bc66c41-ce6c-42a4-ae81-8f80b1c8c4ba.html?59632]http://topic.csdn.net/u/20100724/17/8bc66c41-ce6c-42a4-ae81-8f80b1c8c4ba.html?59632[/url] 写一个demo。rnrn首先,做任何界面都需要先在纸面上设计一下布局。我们需要左右布局,左边出现treeview显示部门列表,而右边则显示部门所对应的员工信息。并且我们需要使用asp.net ajax方式,既页面是无刷新的。rnrn接下来,由于这个demo界面交互行为实在是太简单,我们直接进入BLL设计环节。(正常情况下你应该将界面划分小的组件,每一个组件使用interface定义出用户行为)我们定义三个类型[code=C#]using System.Collections.Generic;rnrnpublic class 部门rnrn public string 名称 get; set; rnrn public string 编号get;set;rnrn private List _children = new List();rnrn public List 下级部门rn rn getrn rn return _children;rn rn rn[/code]这里将部门建立为一个树,既部门下边可以有子部门的一个列表。rn[code=C#]public class 员工rnrn public string 姓名 get; set; rn public int 生日_月 get; set; rn public int 生日_日 get; set; rn[/code]rn员工比较简单,作为例子,我们只关注三个简单信息。rnrnrn最后是创建BLL层代码。这里我特意让所有BLL方法都返回假的数据,以便测试。等你测试通过,可以用真正的BLL层代码替换掉这个文件,从数据库去读真实的数据:[code=C#]using System;rnusing System.Collections.Generic;rnrnpublic static class BLLrnrn private static Random Rnd = new Random();rnrn public static 部门 Get部门()rn rn var x = new 部门 名称 = "公司", 编号 = "0" ;rn var x1 = new 部门 名称 = "总经办", 编号 = "001" ;rn var x3 = new 部门 名称 = "人事劳资", 编号 = "003" ;rn x.下级部门.Add(x1);rn x.下级部门.Add(x3);rn var x32 = new 部门 名称 = "食堂", 编号 = "00302" ;rn x3.下级部门.Add(x32);rn return x;rn rnrn public static List Get部门员工(string code)rn rn if (code == null)rn return new List();rnrn var ret = new List();rn for (var i = 0; i < Rnd.Next(10, 101); i++)rn ret.Add(new 员工rn rn 姓名 = "部门" + code + "员工_" + i.ToString(),rn 生日_月 = Rnd.Next(1, 13),rn 生日_日 = Rnd.Next(1, 29)rn );rn return ret;rn rn[/code]rnrnrn--------------------------------- 未完 ---------------------------------
BUG IME DEMO (WPF)
WPF 输入法和快捷键的冲突例子
Hunting Security Bug Demo
Hunting Security Bug 随书的示例和代码,有几个缓冲区溢出的很有意思。
购物车demo(内含bug)
坑 bean层加一个isChecked 确认是否选中 private boolean isChecked; public boolean isChecked() { return isChecked; } public void setChecked(boolean checked) { isChecked = checked; ...
ListView的动态加载-很简单的Demo
ListView的动态加载,想必大家在网上都看过很多资料了。我在这里也不罗嗦,提供非常简单的Demo给一些需要的人。 这个Demo里面只有两个部分, Activity做显示,以及一个Factory创建信息。 MainActivity.java Java代码   package com.demo;       import java.util.List;    imp...
mybitas的很简单demo的实现
mybitas的很简单demo的实现 -<mapper namespace="/"> <select resultType="com.mxy.pojo.User" parameterType="int" id="findById"> select admin_id,admin_name,admin_password from icme_admin where admin_id=#{id} </select> </mapper>
spring 事务不回滚
配置都没有问题 就是不回滚 最终发现是配置的service层被扫描了2次, 排除扫描2次后问题解决。
spring的事务不回滚
rn rn rnrn rn rn rn rn rn rnrnrn rn rnrnrnrn不知道为什么已经配置成这样了,还是不回滚rnrnrnrn我在中间层加了一个rnpuf.insertProductUpgradeAndUpdateSoftSN(ssn, i);rn String s = null;rn String a = s.toLowerCase();rnrn肯定会抛出一个空指针异常。不知道为什么,不回滚。rnrn[code=Java]rnpackage com.autonavi.sgm.domain.logic.batchupgrade;rnrnimport java.io.FileNotFoundException;rnimport java.io.IOException;rnimport java.util.Date;rnimport java.util.List;rnrnimport org.springframework.beans.factory.annotation.Autowired;rnimport org.springframework.beans.factory.annotation.Qualifier;rnimport org.springframework.stereotype.Component;rnimport org.springframework.stereotype.Repository;rnimport org.springframework.transaction.annotation.Propagation;rnimport org.springframework.transaction.annotation.Transactional;rnrnimport com.autonavi.sgm.dao.bean.Dealer;rnimport com.autonavi.sgm.dao.bean.FileManage;rnimport com.autonavi.sgm.dao.bean.ProductUpgrade;rnimport com.autonavi.sgm.dao.bean.SoftSN;rnimport com.autonavi.sgm.domain.logic.Softsn.SoftSNFacade;rnimport com.autonavi.sgm.domain.logic.dealer.DealerFacade;rnimport com.autonavi.sgm.domain.logic.filemanage.FileManageFacade;rnimport com.autonavi.sgm.domain.logic.product.ProductFacade;rnimport com.autonavi.sgm.domain.logic.productupgrade.ProductUpgradeFacade;rnimport com.autonavi.sgm.util.SGMJavaConPOI;rnimport com.op.WLD4Update;rnrn@Component(value = "batchUpgradeFacade")rn@Transactional(readOnly = false)rn@Repositoryrnpublic class BatchUpgradeImpl implements BatchUpgradeFacade rnrn private SGMJavaConPOI sgmc = new SGMJavaConPOI();rnrn @Autowiredrn @Qualifier("productFacade")rn private ProductFacade pf;rnrn @Autowiredrn @Qualifier("dealerFacade")rn private DealerFacade df;rnrn @Autowiredrn @Qualifier("softSNImpl")rn private SoftSNFacade ssf;rnrn @Autowiredrn @Qualifier("productUpgradeFacade")rn private ProductUpgradeFacade puf;rnrn @Autowiredrn @Qualifier("fileManageFacade")rn private FileManageFacade ff;rnrn /*@Transactional(readOnly = false, propagation = Propagation.NESTED, rollbackFor = rn Exception.class, RuntimeException.class )*/rn public String setExcelUpgrade(List listupgrade,rn List snList, String filePath, String filename)rn throws Exception rn // TODO Auto-generated method stubrn String info = null;rn if (listupgrade != null) rn for (ProductUpgrade i : listupgrade) rn SoftSN ssn = snList.get(0);rn ssn.setStatus("100501");rn String sn = ssn.getSn();rn String tmpsn = sn.replaceAll("-", "");rn i.setSn(sn);rn String vin = i.getVin();rn String mapedition = i.getMedition();rn vin = "51AF484D00005C35328DD610766C56F9";// 测试数据rn String strDevCode = WLD4Update.GetDevCode(tmpsn, vin, 5, 3, 40,rn 24);rn i.setRn(strDevCode);rn String dcode = i.getField1();rn Dealer dl = df.findByDcode(dcode);rn i.setSid(dl.getId());rn i.setMedition(mapedition);rn i.setCtime(new Date());rn i.setStatus("100100");rn puf.insertProductUpgradeAndUpdateSoftSN(ssn, i);rn String s = null;rn String a = s.toLowerCase();rn /*rn * ssf.updateSoftSn(ssn); puf.insertProductUpgrade(i);rn */rnrn snList.remove(ssn);rnrn rnrn String resultInfo = sgmc.setExcelUpgrade(filePath, "清单", filename,rn listupgrade);// resultInfo是结果信息,成功与否rnrn FileManage fm = new FileManage();rn fm.setCtime(new Date());rn fm.setFilename(filename);rn fm.setAddress(filePath);rn ff.insertFileManage(fm);rn System.out.println(filePath);rn return resultInfo;rn else rn info = "list为空!";rn return info;rn rn rnrnrnrn[/code]rn
spring事务不回滚
写了一个spring测试的例子,事务不能回滚,请高人指点,现在把部分代码贴出来,大家帮忙看下问题出在哪了 ? 先谢了!rnrnapplicationContext.xmlrn ......rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn PROPAGATION_REQUIRED,-Exceptionrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnrnServiceTarget.javarnpublic class ServiceTarget implements Service rn private UserInfoDAO userInfoDao;rn public void setUserInfoDao(UserInfoDAO userInfoDao)rn this.userInfoDao=userInfoDao;rn rn public void transactionMethod(UserInfo userInfo) throws Exceptionrn userInfoDao.save(userInfo);rn System.out.println("---sava suc---");rn //插入空记录,会异常 ,但是没有回滚rn userInfo = new UserInfo();rn userInfoDao.save(userInfo);rn rnrnrnUserInfoDAO.javarnpublic class UserInfoDAO extends HibernateDaoSupport rn ......rn public void save(UserInfo transientInstance)throws Exceptionrn getHibernateTemplate().save(transientInstance);rn rnrnrnLoginAction.javarnpublic class LoginAction extends Action rn private ServiceTarget serviceTarget;rn public void setServiceTarget(ServiceTarget serviceTarget)rn this.serviceTarget = serviceTarget;rn rn public ActionForward execute(ActionMapping mapping, ActionForm form,rn HttpServletRequest request, HttpServletResponse response) rn LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stubrn rn UserInfo userInfo=new UserInfo();rn userInfo.setLoginName(loginForm.getName());rn userInfo.setUserPassword(loginForm.getPsw());rn tryrn serviceTarget.transactionMethod(userInfo);rn return mapping.findForward("suc"); rn catch(Exception e)rn e.printStackTrace();rn return mapping.findForward("fail");rn rn rnrn//从页面提交,会正常插入一条记录而不回滚,第二条记录插入异常怎么不回滚呢???
spring 事务 不回滚
spring 配置文件 如下:rn[code=text]rnrnrn Spring公共配置rn rn rn rn rn rn rn rn rn classpath*:/application.propertiesrn rn rn rn rn rn rn rn rnrn rn rnrn rn rn rn rn rn rn rnrn rn rn rn rn rn rn rnrn rn rnrn rn rnrn rn rn rn rn rnrnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrn rn rn rn rn rn rn rn rn rn rn rn rnrn rn rnrnrn rn rnrn rn rn rn rn rn[/code]rnrn测试代码:rn[code=java] @Overridern @Transactional(propagation = Propagation.REQUIRED)rn public void saveLoginInfo(String userName, String dateString, String result) rn String sql = "INSERT INTO prc_mbl_usr_usg (slsprs_id, lgn_dtm, lgn_sts ) VALUES (" + "'" + userName + "'," + "'" + dateString + "'," + "'" + result + "')";rn logger.info(sql);rn toolsDao.insertUtils(sql);rn int m = 1;rn if (m == 1) rn throw new RuntimeException();rn rn toolsDao.insertUtils(sql);rn [/code]rnrn在测试代码中,抛出异常后,插入的记录无法回滚!
Spring事务不回滚
基于spring注解式事务管理机制,在service层对异常进行trycatch之后,发现处理了异常但事务未回滚,排查原因未发现问题,重新解读了一遍spring事务管理机制,了解到spring aop默认只会捕获runtimeexception,service层处理了之后spring aop无法捕获,导致无法回滚。 解决方案:1、service层不对异常进行处理,交由controller层处理
spring 事物不回滚
&amp;lt;beanid=&quot;dataSource&quot; class=&quot;com.mchange.v2.c3p0.ComboPooledDataSource&quot; destroy-method=&quot;close&quot;&amp;gt; &amp;lt;propertyname=&quot;driverClass&quot; value=&quot;${jdbc.driverClassName}&quot;/&amp;gt; &amp;lt;
spring 事务不回滚!!!
我做了一个简单的测试,内容是测试同步事务rn程序里有两个DAO,第一个成功运行,第二个出错,但事务没有回滚.rn配置了几天都没有解决问题,所以我把代码打包上来请高手们帮我看看,rn如果找出问题,麻烦把修改后的代码给我发一份rn我的电子邮箱:fmfeggman@163.com rn谢谢!
为什么Spring下的事务管理碰到异常后不回滚,100分!!!!
rnrn程序运行正常,rnSystemImpl里面有两个method: insertPlan(), deletePlan();rn我在程序中先执行deletePlan(),再执行insertPlan(),rn在insertPlan这个方法里面故意打错了几个字,让程序发生异常,rn但是查询数据库后发现deletePlan()还是执行了,事务根本就没有回滚。rn各位大侠请指教!!!!!!rnrnrn配置文件如下:rnrnrn rn rn rn $jdbc.driverClassNamern rn rn $jdbc.urlrn rn rn $jdbc.usernamern rn rn $jdbc.passwordrn rn rnrn rn rn rn /WEB-INF/config/sqlMapConfig.xmlrn rn rn rn rn rnrnrnrn rn rn rn rn rnrn rn rn rn rn rn rn PROPAGATION_REQUIREDrn PROPAGATION_REQUIREDrn PROPAGATION_REQUIREDrn PROPAGATION_REQUIRED,readOnlyrn rn rn rnrn rn rn rn rn rn rn rnrnrn rn rn rn rn rnrnrnrnrnrnrnSystemImpl的源代码如下:rnrnpackage com.dao;rnrnimport java.sql.SQLException;rnimport java.util.Map;rnrn/**rn * Created by IntelliJ IDEA.rn * User: Administratorrn * Date: 2005-6-29rn * Time: 11:40:23rn * To change this template use File | Settings | File Templates.rn */rnpublic class SystemImpl implements SystemFacadern PlanDao planDao;rn Map map=null;rnrn public PlanDao getPlanDao() rn return planDao;rn rnrn public void setPlanDao(PlanDao planDao) rn this.planDao = planDao;rn rnrn public void deletePlan() throws SQLException rn this.planDao.deletePlan();rn rnrn public void insertPlan() throws SQLException rn this.planDao.insertPlan(map);rn rnrnrnrn调用insertPlan,deletePlan的class略。rnrnrn
关于Spring事务管理无法回滚的问题
这几天在学习spring事务管理,遇到了一个问题,什么配置都做了,什么方法都试了,但是在事务中抛出异常后,就是无法回滚,也就是事务管理没有生效。真的找不到问题! 最后发现了是因为我对数据库的操作是直接获取了数据源的连接,这些操作在spring容器之外,不受spring容器管理,所以spring事务无法管理,只要用在spring容器中配置的jdbcTemplate来执行数据库操作,或者使用一些和s
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview