前一段时间,项目代码评审,发现有TX不使用Spring的事务处理,而直接封装方法,手动进行数据的回滚,得悉原因是:抛出异常以后事务不起作用,没有回滚。这理由顿时让人很无语,不过还算个聪明的TX,知晓另辟蹊径,但是在insert的时候,手动回滚直接delete就可以了,如果是update,不晓得还会有什么更犀利的办法。
仔细评审代码细节,发现该TX压根没有按照框架原先设计在service层throws BusinessException,而是直接throws Exception。Spring配置异常回滚采用的是rollback-for=“BusinessException”。TX提出疑问:Spring不是抛出异常事务就会回滚么?带着疑问,查阅资料,分析源代码,最终找到想要的答案。这一切来源于java的检查性异常、非检查性异常的区别。
使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。
那么什么是检查型异常什么又是非检查型异常呢?
最简单的判断点有两个:
1.继承自runtimeexception或error的是非检查型异常,而继承自exception的则是检查型异常(当然,runtimeexception本身也是exception的子类)。
2.对非检查型类异常可以不用捕获,而检查型异常则必须用try语句块进行处理或者把异常交给上级方法处理总之就是必须写代码处理它。所以必须在service捕获异常,然后再次抛出,这样事务方才起效。
分享到:
相关推荐
关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....
public void executeTransactionBySQL() throws HibernateException { TestJTAByOracleVo vo1=new TestJTAByOracleVo(); vo1.setName("3333333"); HibernateByOracleDAO.addByOracle(vo1); ...
spring的良好的扩展性,集成度,IOC,AOP事务,已经是项目的基础条件. 整个项目只使用了spring 没有struts,没有hibernate //就极简而言,一个数据库只需要一个Service,就可以查询这个数据库的任意一张表 //以下是我的...
深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)
hrows关键字通常被应用在声明方法时,用来指定可能抛出的异常,throws 用于抛出方法层次的异常,并且直接由些方法调用异常处理类来处理该异常
java throws声明异常实例一 java throws声明异常实例一
java throws声明异常实例二 java throws声明异常实例二
* @throws Exception 运行异常 */ public boolean upLoad(HttpServletRequest request) throws Exception; /** * 释放系统资源. * @return 析构情况 * @throws Exception 运行异常. */ public boolean ...
public static void main(String[] args) throws Exception{ System.out.print("The input Fahrenheit is "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int f = Integer....
public String execute() throws Exception { service.find2(); return SUCCESS; }
主要介绍了Java异常处理与throws关键字用法,结合实例形式分析了java常见的异常、错误处理及throws关键字相关使用技巧、注意事项,需要的朋友可以参考下
Java异常处理--异常处理的方式2:throws
22.javathrows声明抛出异常序列.zip22.javathrows声明抛出异常序列.zip22.javathrows声明抛出异常序列.zip22.javathrows声明抛出异常序列.zip22.javathrows声明抛出异常序列.zip22.javathrows声明抛出异常序列.zip22...
public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 压缩 ...
Spring Boot 项目旨在简化创建产品级的 Spring 应用和服务... public static void main(String[] args) throws Exception { SpringApplication.run(Example.class, args); } } 标签:Spring
这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 ...29 HttpServletResponse response)throws Exception{ 30 31 request.setAttribute("hello_1",...
public final void initConn() throws Exception 初始化和EIE系统的连接。 public final void initConn(String confFile) throws Exception 初始化和EIE系统的连接。 public final void initConn(Map args) throws ...
1.面向切面编程提供声明式事务管理 2.spring支持用户自定义的切面 面向切面编程(aop)是对面向对象编程(oop)的补充, 面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 ...
throws与throw.txt区别区别区别区别
public static void main(String[] args) throws Exception { //加载spring配置 ApplicationContext ac = new ClassPathXmlApplicationContext("spring/applicationContext-jms-producer.xml"); //获取生产...