在service类前加上@transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。
spring默认情况下会对运行期例外(runtimeexception)进行事务回滚。这个例外是unchecked
如果遇到checked意外就不回滚。
如何改变默认规则:
1 让checked例外也回滚:在整个方法前加上@transactional(rollbackfor=exception.class)
2 让unchecked例外不回滚:@transactional(notrollbackfor=runtimeexception.class)
3 不需要事务管理的(只查询的)方法:@transactional(propagation=propagation.not_supported)
在整个方法运行前就不会开启事务
还可以加上:@transactional(propagation=propagation.not_supported,readonly=true),这样就做成一个只读事务,可以提高效率。
(6) companyservice.java
import javax.annotation.resource;
import org.springframework.stereotype.service;
import org.springframework.transaction.annotation.propagation;
import org.springframework.transaction.annotation.transactional;
import com.dao.companydao;
import com.entry.tcompanyinfo;
import org.springframework.stereotype.service;
import org.springframework.transaction.annotation.propagation;
import org.springframework.transaction.annotation.transactional;
import com.dao.companydao;
import com.entry.tcompanyinfo;
@service("companyservice")
@transactional
@transactional
public class companyservice {
@resource(name="companydao")
private companydao companydao;
public void setcompanydao(companydao companydao) {
this.companydao = companydao;
}
this.companydao = companydao;
}
public companydao getcompanydao() {
return companydao;
}
@transactional(readonly=false,propagation=propagation.required,rollbackfor={exception.class})//readonly=true慎用(不可写事务)
public void test(tcompanyinfo tc){
try{
companydao.createobj(tc);
string s=null;
s.length(); //假设会抛出nullpointerexception,就会执行catch里的,如果不在catch里throw一个
return companydao;
}
@transactional(readonly=false,propagation=propagation.required,rollbackfor={exception.class})//readonly=true慎用(不可写事务)
public void test(tcompanyinfo tc){
try{
companydao.createobj(tc);
string s=null;
s.length(); //假设会抛出nullpointerexception,就会执行catch里的,如果不在catch里throw一个
runtimeexception子类,依然不会rollback
}
catch(exception e){
//throw new exception("runtimeexception");
system.out.println("exception");
throw new numberformatexception("format exception"); //重抛一个exception,才能rollback
}
}
}
}
catch(exception e){
//throw new exception("runtimeexception");
system.out.println("exception");
throw new numberformatexception("format exception"); //重抛一个exception,才能rollback
}
}
}
在spring里,同样只会rollback unchecked exception(runtimeexcption及子类),而checked exception(exception及子类)是不会rollback的,除非你特别声明。
@transactional(readonly = false, propagation = propagation.requires_new,rollbackfor = {myexception1.class,myexception2.class})
因此所有在service层方法中用throws定义的exception,都必须在事务定义中进行rollback设定。(请勿善忘)
所有在service层方法中被catch处理了的异常,又希望容器辅助rollback的话,必须重抛一个预定义的runtimeexception的子类。(请勿回望)
android入门实例:https://gitbook.cn/gitchat/activity/5d382e64b669c0566c335b32
相关推荐
null 博文链接:https://coolszy.iteye.com/blog/542717
spring使用注解进行事物管理例子,里面有说明.
spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上写的不清楚,要不版本都很旧了,所以就是不回滚,spring 的配置太灵活了,在加上新手,根本就不可能明白spring...
本代码使用h2内存数据库演示spring事务使用,包括编程式事务,声明式事务@transactional使用,自定义事务事务注解实现自定义事务管理器
spring boot 纯注解方法事务控制回滚,注解 简单配置文件使用多线程demo
声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@transactional注解。显然基于注解的方式更简单易用,更清爽。spring注解事务实现demo
使用spring注解方式管理事务与传播行为详解 24.使用spring配置文件实现事务管理 25.搭建和配置spring与hibernate整合的环境 26.spring集成的hibernate编码与测试 27.struts与spring集成方案1(struts集成spring) ...
spring 事务基于注解模式
包含了spring事务的两种使用方式,xml和注解,有数据库
spring事务管理教程,详细讲解了spring中的事务管理,包括声明式事务,注解式事务,以及事务配置等等
spring事务管理几种方式代码实例:涉及编程式事务,声明式事务之拦截器代理方式、aop切面通知方式、aspectj注解方式,通过不同方式实例代码展现,总结spring事务管理的一般规律,从宏观上加深理解spring事务管理特性...
4、了解spring事务管理的两种方式; 5、掌握基于xml和annotation的声明式事务管理的使用。 二.实验内容 (1)使用spring jdbc实现书店的购书过程,即有如下一个bookshopdao接口,编写bookshopdaoimp类实现该接口中的...
spring3hibernate4注解式事务管理
spring注解的方式开启事务。开启事务,事务挂起,等等。
本文处理spring mybatis,或springjdbc,对oracle事务不能提交的问题分析与解决
四,spring基于注解的开发对应源代码,事务详解(概念重点),基于注解的事务控制,spring集成junit
springjdbc注解事务.zip,springjdbc注解事务.zip
spring hibernate注解声明式事务实例
本篇文章主要介绍了spring 使用注解方式进行事务管理配置方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧