spring中事务失效的场景有很多,比如: 未指定回滚异常,抛出自定义的异常、异常被捕获、方法内部直接调用,只有代理对象调用才会有效、方法被private或者final修饰 、当前类没有被Spring容器托管等等 这里主要说一下 未指定回滚异常,抛出自定义的异常的场景,这里也不是全部的自定义异常都不会回滚,如果自定义异常继承的是Exception类,就不会回滚事务,如果继承的是 RuntimeException类则会回滚 默认情况下,事务将在RuntimeException和Error上回滚,但不会在检查异常(业务异常)上回滚 检查异常:就是编译器要求你必须处置的异常。在写的某段代码时,编译器要求你必须要对这段代码try…catch,或者throws exception,这就是检查异常 非检查异常:RuntimeException与其子类,以及错误(Error)