您的位置:首页 > 编程语言 > Java开发

spring 事务控制

2016-04-14 16:36 411 查看
一、Spring中事务的配置(applicationContext.xml)

<!-- 事务配置 -->

<bean id="transactionManager"

      class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <property name="sessionFactory"ref="sessionFactory"/>

</bean>

<!-- 使用annotation定义事务 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

二、在service加try 导致事务不回滚   【注明:一般service不要加 try】

public class UserServiceImpl{

  public void saveUser(){

   try {
        User user=new User();

        User.setName(“张三”);

        int a=1/0;       //出异常,不会回滚,数据保存到数据库
  }catch(Exception e){

        e.printStackTrace();

 //throw new RuntimeException()

  }

}

三、解决方案 

方法1:

 在service不加try,

方法2:

在catch语句中最后增加throw new RuntimeException()语句 

方法3:

在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚 

四、总结

默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。  

换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: