`

难经7:被忽略的Spring3小改进——支持多数据源的@Transactional事务注解

阅读更多

难经7:被忽略的Spring3小改进——支持多数据源的@Transactional事务注解
liuu.iteye.com

2011-3-23

[问题]


近日,有同事问起,有个项目在配置Spring事务时,使用了@Transactional注解,但这个项目使用了多个数据源,而事务注解只对第一个起作用,咋办?

 

[探幽]

一听之下,想起在用@Transactional配置事务时,确实没注意过多数据源问题,但是记得之前常用的XML配置方式中,对多数据源支持很简单,我想注解配置起来应该也不会太麻烦。

 

先回顾一下之前个人习惯使用的 <tx:advice> + <aop:config>配置方式,大致步骤如下:
1)定义与事务管理器对应的事务通知
2)配置需要拦截的方法调用切面
3)将切入点连接到相应的事务通知
整个系统的事务,三下配置,一处搞定,相比注解方式,个人觉得更简单、省力、统一;而要支持多数据源,再做一遍这123即可,非常简单。

 

不过同事在网上百度了一圈,说大部分的结论是Spring的@Transactional注解不支持,听到这一点我很诧异,不应该啊,要不查查Spring的官方文档?

一查马上发现,在Spring3.0的参考文档中,针对这个问题的,真新增了一节(10.5.6.2)来解决,参见:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations

Most Spring applications only need a single transaction manager, but there may be situations where you want multiple independent transaction managers in a single application. The value attribute of the
@Transactional annotation can be used to optionally specify the identity of the
PlatformTransactionManager to be used. This can either be the bean name or the qualifier value
of the transaction manager bean

 

也就是说,在Spring2.5之前,@Transactional注解确实不支持多数据源,但是Spring3为其增加了value属性配置,可以指定当前事务通知对应的事务管理器。

 

检查了一下Spring的changelogs,这个特性是在3.0M4版中加入的:
@Transactional supports qualifier value for choosing between multiple transaction managers

[解难]


看来,或许这是一个有用的小改进,但很可能被大家忽略了。下面是从官方文档中摘抄出来的示例配置方式,供需要的同学参考:

1、配置事务注解驱动、每个数据源对应的事务管理器,并定义“限定符”

<tx:annotation-driven/>

<bean id="transactionManager1" class="org.springframework.jdbc.DataSourceTransactionManager">
...
<qualifier value="order"/>
</bean>
<bean id="transactionManager2" class="org.springframework.jdbc.DataSourceTransactionManager">
...
<qualifier value="account"/>
</bean> 
 

2、在需要事务的地方,指定“限定符”

 

 

public class TransactionalService {

@Transactional("order")
public void setSomething(String name) { ... }

@Transactional("account")
public void doSomething() { ... }
}
 


3、如果不指定“限定符”,将默认使用“transationManager”命名对应的事务管理器

The default <tx:annotation-driven> target bean name transactionManager will still be used if no specifically qualified PlatformTransactionManager bean is found
 

 

呼呼,小改进,大作用啊。

 

 

5
1
分享到:
评论
5 楼 lvhongfen 2015-09-18  
不过想要在@Transactional("account")  中配置(rollbackFor=Exception.class) 改如何处理呢?
4 楼 lvhongfen 2015-09-18  
嗯嗯,感谢LZ,成功解决问题
3 楼 7454103 2014-04-09  
nice  不错哦!
2 楼 jiajiafucs 2012-03-09  
如果一个方法同时用两个事务,该如何处理?
1 楼 wanqfg 2011-08-23  
你好,我也遇到这个问题
我配置的是动态切换数据源,在没有标注 事务 的时候,可以动态切换 数据源

现在需要事务处理,但加了事务标注后,第一个数据库操作成功,但第二个报错,说找不到表.
应该是加了事务标注后,数据源切换不了所致.

不知你有没有测试的代码,能否发我一份学习一下,谢谢
wanqfg@163.com

相关推荐

    难经3:Struts2,拦截器拦不住Result?

    标题中的“难经3:Struts2,拦截器拦不住Result?”揭示了这是一个关于Struts2框架中拦截器(Interceptor)与结果(Result)交互问题的讨论。在Struts2框架中,拦截器是实现业务逻辑和控制逻辑之间解耦的重要机制,而...

    中医诊断模拟见习——脉诊.ppt

    【中医诊断模拟见习——脉诊】 脉诊是中医诊断疾病的重要手段之一,它通过观察手腕部桡动脉的搏动情况来评估人体的生理状态和疾病情况。在中医理论中,脉象的变化能够反映脏腑功能的盛衰、气血的盈亏以及疾病的性质...

    中医研修会10月份工作计划.doc

    2. 每周三晚7:00-9:00:专题讲座(线上线下同步) 3. 每周六上午10:00-12:00:实践培训及案例分享 4. 每月最后一周周五下午2:00-5:00:学术研讨会 六、资源支持 1. 阅读材料:提供电子版和纸质版的经典书籍供会员...

    2019年安徽屯溪区个体经济发展服务中心招聘模拟试题及答案解析.docx

    3. 刑罚与犯罪的关系:犯罪是刑罚的前提,没有犯罪就不存在适用刑罚的必要。刑罚是针对犯罪行为的法律回应,但不是所有犯罪行为都会必然导致刑罚,因为还涉及到量刑和判决的问题。 4. 中医著作: - 《黄帝内经》:...

    先秦至三国时期的医学文献.docx

    3. 《难经》:《难经》首次将睡眠障碍称为“不寐”,虽然提及较少,但提到了老年人因气血衰退而导致的夜间难以入睡,与年轻人气血旺盛、睡眠正常形成对比。 4. 张仲景的《伤寒论》和《金匮要略》:张仲景是东汉时期...

    中医执业医师——中医学基础理论的继承和创新思路.doc

    例如,《难经》在《内经》的经络学说上进行深化,提出了奇经八脉的概念。张仲景的《伤寒杂病论》则在继承前人经典的基础上,创立了辨证论治的理论体系。明清时期,温病学说的形成,也是在《内经》、《伤寒杂病论》等...

    2019浙江余杭区仁和街道招聘巡防队员试题及答案解析.docx

    - **哥伦布**:意大利探险家,在西班牙王室支持下发现了美洲大陆。 - **库克**:英国航海家,首次登陆澳大利亚东岸和夏威夷群岛。 ### 2. 文物保护措施 - **控制污染排放**:严格限制附近二氧化硫和氮氧化物的排放...

    1鸟的天堂——学习ppt课件

    大的,小的,花的,黑的……”这些细节生动地再现了“鸟的天堂”的生态景象。 - 最后,通过“昨天是我的眼睛骗了我,那‘鸟的天堂’的确是鸟的天堂啊!”这句话,巴金表达了自己对这个地方的赞叹之情,同时也反映了...

    中医儿科(医学高级)-填空_0(精选试题).doc

    1. 在中国古代,儿科医生的历史可以追溯到最早的儿科医生——扁鹊,而被尊称为儿科之圣的是唐代的孙思邈。 2. 古代儿科四大要证指的是惊风、疳积、呕吐、泄泻,这四种病症在古代儿科中被视为常见的儿童疾病。 3. ...

    2018版高中历史第3单元古代中国的科学技术与文学艺术课时跟踪训练8古代中国的发明和发现新人教版必修3

    印刷术的出现,使得知识得以广泛传播,极大地促进了文化的繁荣和教育的发展,尤其是当活字印刷技术成熟后,书籍的制作成本降低,更多人得以接触到各种知识,包括中医的经典著作,如《黄帝内经》、《难经》、《伤寒杂...

    精品资料(2021-2022年收藏)浙江省医疗卫生招聘公共基础知识考试试题.docx

    3. 地方性氟病的防治:主要通过改良水质,去除水源中的氟,预防氟中毒。 4. 高血压的诊断标准:按照世界卫生组织的规定,≥140/90mmHg被定义为高血压。 5. 医患关系模式:切除阑尾手术后的病人通常适用于指导-合作...

    中医药概论(江西中医药)

    中医理论体系的形成历经了多个历史时期,如先秦至汉代的四大经典——《内经》、《难经》、《伤寒杂病论》和《神农本草经》,对辨证论治体系的建立起到了关键作用。《内经》被视为中医学理论体系形成的标志,而《难经...

    七年级历史10月月考试题.doc

    综上所述,这份七年级历史月考试题涵盖了中国远古居民、原始社会的变迁、早期文明的形成、农业生产的发展、古代政治制度、重要历史人物以及历史事件对国家兴衰的影响等多个知识点。通过这些内容的学习,学生可以了解...

    2022年中医执业医师考试复习资料完全版归纳.docx

    7. **小病历鉴别**:出现表证的通常归为感冒。 ### 二、咳嗽 1. **术语来源**:“咳嗽”一词出自《内经》。 2. **理论基础**:“五脏六腑皆令人咳,非独肺也”出自《素问·咳论》。 3. **内外伤病机**:“咳嗽之要...

    主治医师 (中医全科学)-肺系病证(A1型题 2).doc

    《难经》:未明确提出肺痈。 - C. 《金匮要略》:正确选项。“肺痈”病名首见于此书。 - D. 《伤寒论》:未明确提出肺痈。 - E. 《诸病源候论》:对多种疾病病因进行了论述。 **答案**:C. 《金匮要略》 #### ...

    山东省枣庄市2012年秋七年级历史上册《第8课中华文化的勃兴(一)》教案 新人教版.doc

    本课内容丰富,涵盖了文字演变、文学艺术、科学技术等多个领域,旨在通过学习让学生深入了解中华文化的历史底蕴和辉煌成就,培养他们对中国传统文化的热爱和尊重。同时,教学设计强调了能力培养和价值观的塑造,以期...

    2016年上半年浙江省医疗卫生招聘公共基础知识考试题.pdf

    7. 清虚热兼有利尿通淋功效的药物:白薇具有这样的功效,常用于治疗热病后期的虚热和尿路问题。 8. 破伤风的治疗:关键是清除毒素来源、中和毒素和控制痉挛,防止并发症。 9. 影响液体回流的有效胶体渗透压:血浆...

    2019浙江卫视招聘综艺、采编、营销等专业人员试题及答案解析.docx

    这些知识点涵盖了医学历史、企业管理、网络技术应用、社会保障法规以及职业道德等多个领域,都是招聘综艺、采编、营销等专业人员时可能会涉及的综合知识。对于应聘者来说,了解并掌握这些知识有助于提升自身的综合...

Global site tag (gtag.js) - Google Analytics