• Atitit Spring事务配置不起作用可能出现的问题: .是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为


    Atitit Spring事务配置不起作用可能出现的问题:

     

    .是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为MyISAM,是不支持事务操作的),需要修改为InnoDB,就可以支持事务操作了

    1. 入口函数必须是public,否则事务不起作用。这一点由Spring的AOP特性决定的。

    1、首先使用如下代码 确认你的bean 是代理对象吗?

    AopUtils.isAopProxy()

    AopUtils.isCglibProxy() //cglib

    AopUtils.isJdkDynamicProxy() //jdk动态代理

     

    如果不是 那么就是切入点配置出错了 或者如果你使用了springmvc,可能是context:component-scan重复扫描引起的:

    UserService userService = context.getBean(UserService.class);

    // 调用userService的方法执行

    userService.test();

    userService.addUser1("  user2222");

     

    boolean isAopProxy=AopUtils.isAopProxy(userService);

    boolean isCglibProxy=AopUtils.isCglibProxy(userService);

    boolean isJdkDynamicProxy=AopUtils.isJdkDynamicProxy(userService);

       Map m=Maps.newConcurrentMap();

       m.put("isAopProxy", isAopProxy);   m.put("isCglibProxy", isCglibProxy);   m.put("isJdkDynamicProxy", isJdkDynamicProxy);

       System.out.println(JSON.toJSONString(m));//{"isCglibProxy":true,"isAopProxy":true,"isJdkDynamicProxy":false}

     

    2、如果是aop代理,那么说明代理成功,那么可能是如使用mysql且引擎是MyISAM造成的(因为不支持事务),改成InnoDB即可。

     

    3、 如果你是基于类的代理,而非接口,如果想代理父类里的,可以用

    execution(* com.sishuok.es..service..*+.*(..))  

    Spring事务不起作用 问题汇总 - 《亿级流量网站架构核心技术》_ - ITeye博客.html

    是不是同一class没关系的。。只有一个service的俩个method都可以执行事务的。

  • 相关阅读:
    silverlight.js详解.
    Silverlight做随机图形
    腾讯与微软合作,准备应用Silverlight技术
    Flex的起步推动新语言学习
    微软Silverlight将支持DRM数字保护
    Kit 3D 更新
    用silverlight来开发简单的相册.
    加班一星期的结果
    构建Flex应用的10大误区
    ubuntu下SVN服务器安装配置 下的svn 常用命令
  • 原文地址:https://www.cnblogs.com/attilax/p/15197456.html
Copyright © 2020-2023  润新知