Spring 事务不起作用的几种情况

1:必须是runtime异常,方法不要有try  catch语句。

2:service 中

@Service()
public class AServiceImpl1 implements AService{
    @Transactional(propagation = Propagation.REQUIRED)
    public void a() {
        this.b();
    }
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void b() {
    }
}

这种情况 b的事务不起作用,a的事务起作用,想让b事务起作用,俩种方法:

一:

this.b();-----------修改为--------->((AService) AopContext.currentProxy()).b();

二:

    @Service
    public class AServiceImpl3 implements AService{
        @Autowired  //①  注入上下文
        private ApplicationContext context;  

        private AService proxySelf; //②  表示代理对象,不是目标对象
        @PostConstruct  //③ 初始化方法
        private void setSelf() {
            //从上下文获取代理对象(如果通过proxtSelf=this是不对的,this是目标对象)
            //此种方法不适合于prototype Bean,因为每次getBean返回一个新的Bean
            proxySelf = context.getBean(AService.class);
        }
        @Transactional(propagation = Propagation.REQUIRED)
        public void a() {
           proxySelf.b(); //④ 调用代理对象的方法 这样可以执行事务切面
        }
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        public void b() {
        }
    }

原文地址:https://www.cnblogs.com/hanguocai/p/9876685.html

时间: 2024-08-02 15:49:55

Spring 事务不起作用的几种情况的相关文章

Spring事务不起作用 问题汇总

Spring事务不起作用 问题汇总 博客分类: spring杂谈 java开发常见问题分析 总有很多朋友询问spring事务不起作用怎么回事,这里我汇总下,欢迎补充: 1.首先使用如下代码 确认你的bean 是代理对象吗? AopUtils.isAopProxy() AopUtils.isCglibProxy() //cglib AopUtils.isJdkDynamicProxy() //jdk动态代理 如果不是 那么就是切入点配置出错了 或者如果你使用了springmvc,可能是contex

[Java][Spring]Spring事务不起作用 问题汇总

[Java][Spring]Spring事务不起作用 问题汇总 http://blog.csdn.net/szwangdf/article/details/41516239

Spring事务不起作用原因

首先声明: Checked异常继承java.lang.Exception类.Unchecked异常继承自java.lang.RuntimeException类. 而,Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked exception, 那么只有在发生了unchecked exception的时候,才会进行事务回滚. 事务不起作用可能原因: 1.上述的异常问题. 2.方言问题. 3.MySQL引擎问题:MyISAM不支持事务. 4.hibern

自定义springmvc统一异常处理器(实现HandlerExceptionResolver接口)不起作用的一种情况

ExceptionResolverCustom 这个是自定义的异常处理器类. 在springmvc中注册 在web.xml文件中屏蔽springmvc自动注册的异常处理器 网上的资料就是这么配置的,可自己配置的异常处理器就是不起作用 看下springmvc是如何加载自定义的异常处理器的 可以看到,springmvc从容器中取自定义异常处理器时是通过指定的id去取的, 所以说在springmvc中配置自定义处理器的时候id注意下不要写错,这个id是 handlerExceptionResolver

spring事务配置的坑

基于 <tx> 命名空间的声明式事务管理 前面两种声明式事务配置方式奠定了 Spring 声明式事务管理的基石.在此基础上,Spring 2.x 引入了 <tx> 命名空间,结合使用 <aop> 命名空间,带给开发人员配置声明式事务的全新体验,配置变得更加简单和灵活.另外,得益于 <aop> 命名空间的切点表达式支持,声明式事务也变得更加强大. 1.如果没有配置事务,数据库操作是无法成功的. 2. 如果用try catch里的操作是无法用事务管理的? Spr

Spring 事务源码分析——Hibernate篇

在Spring与Hibernate整合的时候,可以利用Spring的事务管理机制,为我们管理事务的开启.提交.回滚等操作.这样的方式极大的减少了我们的代码量,让我们只专注于业务代码的编写.在使用Hibernate的时候,每一个操作都要经历事务开启与提交这样的操作,他们在业务代码的周围,这样来看是不是就想到了AOP编程,把这部分代码抽取出来.没错,Spring正是这样做的,Spring的事务管理就是基于AOP的. 1 Spring的事务隔离与传播 Srping的事务定义了五个隔离等级(isolat

spring事务声明的几种传播特性

最近遇到了一个spring事务导致的问题,所以写了几个小程序了解了一下事务的传播特性,下面分别举例子分别看看事务的传播特性. 事务的几种传播特性 1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启 Java代码   /** * TransactionTestService     test1和test2配有事务(PROPAGATION_REQUIRED) */ public interface TransactionTestService {

Spring事务配置的五种方式

Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分

(转)spring事务管理几种方式

转自:http://blog.csdn.net/jeamking/article/details/43982435 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是