@transactional注解在什么情况下会失效,为什么。

1,901 阅读7分钟
原文链接: www.cnblogs.com
西北野狼
我的github: https://github.com/soyoungboy
我的segmentfault: http://segmentfault.com/u/soyoungboy

【不积跬步,无以至千里;不积小流,无以成江海】
博客园   首页   新随笔   联系   订阅 订阅  管理

@transactional注解在什么情况下会失效,为什么。

@transactional注解在什么情况下会失效,为什么。

@Transactional的使用:

@Transactional
public void updateUserAndAccount(String user) {
    dao1.updateUserAccount();
    dao2.updateAccountAmount()
}

在xml中配置spring事务管理类DataSourceTransactionManager

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dynamicDataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />

调用含注解的方法并抛异常,执行有异常抛出,z1表新增记录、z2表无新增记录,事务失效

public void testTransaction() {
    testTransaction3();
}
@Transactional
public void testTransaction3() {
    db.update("insert into z1(c1) values('2')");
    // 测试
    String str = null;
    if (str.startsWith("111")) {
        db.update("insert into z1(c1) values('adff2')");
    }
}

修改后:

@Transactional
public void testTransaction() {
    db.update("insert into z1(c1) values('2')");
    testTransaction2();
}
public void testTransaction2() {
    // 主动抛出异常 测试回滚
    String str = null;
    if (str.startsWith("111")) {
        db.update("insert into z2(c1,c2) values('2','3')");
    }
}

在代理下(默认或当配置为proxy-target-class="true"),只有当前代理类的外部方法调用注解方法时代理才会被拦截。事实上,这意味着:一个目标对象的方法调用该目标对象的另外一个方法,即使被调用的方法已使用了@Transactional注解标记,事务也不会有效执行。

另外关于@Transactional的说明,Spring 有一段描述关于方法可见性:
@Transactional注解只对代理类时的public方法有效,被protected、private、package-visible修饰的方法使用@Transactional注解无效,对这类方法使用事务注解,推荐使用AspectJ进行事务管理。Spring框架虽然提升了效率,偶尔也会产生意外的问题,且行且研究。

posted on 2018-05-09 11:12 西北野狼 阅读(10) 评论(0) 编辑 收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录注册访问网站首页。
  • 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
  • 【活动】2050 大会 - 年青人因科技而团聚(5.26-5.27 杭州·云栖小镇)
  • 【推荐】跟最课程陆敏技学Java,5个月高薪就业
  • 【推荐】华为云DevCloud精彩活动集结,重磅福利,免费领取!
  • 【活动】腾讯云云服务器新购特惠,5折上云
  • 【大赛】2018首届“顶天立地”AI开发者大赛
  • 腾讯云0509 最新IT新闻:
    · 在金融业工作了六年,给想入这行的说几个经验
    · 300多位学者联名上书,员工离职,会让谷歌停止与美国国防部合作吗?
    · 外国程序员发帖求助:快四十岁了,不知道以后该怎么办
    · 口碑APP试水手机提前点单功能:将在全国开通
    · 途牛目的地频道上线 于敦德:全面拓展目的地服务网络
    » 更多新闻... 最新知识库文章:
    · 评审的艺术——谈谈现实中的代码评审
    · 如何高效学习
    · 如何成为优秀的程序员?
    · 菜鸟工程师的超神之路 -- 从校园到职场
    · 如何识别人的技术能力和水平?
    » 更多知识库文章... 历史上的今天:
    2016-05-09 java.lang.NoSuchMethodError: android.view.View.setBackground
    2015-05-09 超赞的OOM检测(除了mat以外)
    昵称:西北野狼
    园龄:4年9个月
    粉丝: 35
    关注: 4 +加关注
    < 2018年5月 >
    29 30 1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31 1 2
    3 4 5 6 7 8 9

    搜索

       

    常用链接

    我的标签

    随笔分类

    随笔档案

    My github

    我的个人博客站点

    积分与排名

    • 积分 - 122299
    • 排名 - 2527

    最新评论

    阅读排行榜

    评论排行榜

    推荐排行榜

    Powered by: 博客园 模板提供:沪江博客 Copyright ©2018 西北野狼