在执行某一操作时,意外发现自己定义的异常,无法被外面的Controller catch到。
追查发现在service内是可以正常打印异常信息,但外层Controller仅能拿到一个事务回滚的roolback异常。
仔细查看错误信息:
application exception overridden by commit exception
应用自定义异常被事务异常覆盖了。
那么如何正常的在外层捕获到自定义的异常呢?
方法1.在对应的service上追加
@Transactional(rollbackFor = DemoException.class)
方法2.让自定义的异常继承RuntimeException(未校验,不过理论上是可以的)
那么为什么会可以呢?
事情的原因是 only unchecked exceptions cause rollbacks in spring transactions.(Spring的默认回滚RuntimeException)
在Spring事务管理里仅会回滚非检查异常。
我们捕获了一些特殊的情况,处理完之后会自动转化为一个checked exception 。事务不会对该异常做回滚。后续的事务回滚会覆盖自定义的异常。
相关推荐
《Spring Dubbo与Spring Boot整合应用详解》 在现代企业级开发中,Spring框架和其衍生的Spring Boot已经成为Java开发者的重要工具。同时,随着微服务架构的流行,Dubbo作为一款高效率的服务治理框架,也得到了广泛...
Spring Boot 2.4.0 引入了对配置文件加载机制的重大调整,这主要针对的是使用复杂配置的场景,比如结合Spring Cloud配置中心。这次更新的目的是为了更好地支持Kubernetes环境下的配置管理,尤其是Kubernetes的Config...
48. **Array Index Out Of Bounds Exception**:数组索引越界异常发生在尝试访问数组不存在的索引时。 49. **Null Pointer Exception**:空指针异常发生在试图访问null引用的对象时。 50. **Class Not Found ...
* ArithmeticException:算术异常,用于描述算术运算的异常。 * IllegalArgumentException:非法数据异常,用于描述非法数据的异常。 * ArrayIndexOutOfBoundsException:数组索引越界异常,用于描述数组索引越界的...
异常处理相关的英语词汇有:Exception(异常)、Runtime Exception(运行时异常)、ArithmeticException(算术异常)、IllegalArgumentException(非法参数异常)、ArrayIndexOutOfBoundsException(数组索引越界...
public abstract class Application extends Object Application class from which JavaFX applications extend. Life-cycle The entry point for JavaFX applications is the Application class. The JavaFX ...
异常处理(Exception Handling)是Java编程中的重要部分,通过try-catch-finally语句块来捕获和处理可能出现的错误。 Java支持多线程(Multithreading),使得一个程序可以同时执行多个任务。垃圾回收机制(Garbage...
- ArithmeticException:算术异常,例如除以零等运算错误。 - IllegalArgumentException:非法参数异常,传递给方法的参数无效。 - ArrayIndexOutOfBoundsException:数组索引越界异常,访问数组时使用的索引超出...
Application A lock resource defined by an application. The lock manager knows nothing about the resource format. It simply compares the 'strings' representing the lock resources to determine whether ...
Exception代表程序运行时可能出现的问题,如ArithmeticException(算术异常)、IOException(输入输出异常)等。try-catch-finally结构用于捕获和处理异常,throw和throws用于抛出异常。print Stack Trace()用于显示...
8. **Error与Exception**:Error通常代表系统级别的问题,可能难以恢复,而Exception是程序运行时可预见的异常,可以通过异常处理机制进行处理。 9. **final, finally, finalize的区别**:final用于声明不可更改的...
* ArithmeticException:算术异常,用于表示 Java 算术运算中的异常。 * IllegalArgumentException:非法数据异常,用于表示 Java 非法数据异常。 * ArrayIndexOutOfBoundsException:数组索引越界异常,用于表示 ...
Exception是程序运行时发生的不正常情况的类,包括Runtime Exception(运行时异常)、Arithmetic Exception(算术异常)、IllegalArgumentException(非法数据异常)等。异常处理的关键字有try、catch、finally、...
因此,只有"ArithmeticException异常,"会被打印,最后执行finally块,答案是"A"。 以上是对Java选择题中的知识点进行的详细解释,涵盖了继承、构造方法、方法重载、多态、异常处理、对象的转型以及日志框架log4j的...
描述中提到的问题是尝试在后台声明一个Web服务,但在前台调用时抛出了`java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage`的异常。这通常意味着在处理...
Public and protected class members are documented only when they are normally used in application programs or derived classes. Occasionally, private members are listed because they override a public ...
#### Exception handling 异常处理 - **定义**:异常处理是一种机制,用于捕获和处理异常。 - **应用场景**:确保程序在遇到异常时能够正常运行。 #### Garbage collection 垃圾回收机制 - **定义**:垃圾回收机制...
方法重载(Overloading)指的是在同一个类中定义多个同名但参数列表不同的方法,而方法覆盖(Overridden)是指子类重写父类的方法。 接下来,我们将讨论今天的学习内容。在高级类的特性中,`static`和`final`关键字...