Spring多數(shù)據(jù)源導(dǎo)致配置失效的解決
spring多數(shù)據(jù)源導(dǎo)致配置失效
<!-- 切換數(shù)據(jù)源 --> <bean id="dataSourceAdvice" class="com.xxxx.app.datasource.DataSourceAdvice" /> <!-- 配置事務(wù)切面 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.xxxx..*.*(..))" /> <aop:advisor pointcut-ref="serviceOperation" advice-ref="dataSourceAdvice" /> </aop:config>
如果在springApplication.xml中配置的, 那么expression配置的相關(guān)的 包,必須在springmvc.xml中被掃描到
<context:component-scan base-package="com.xxxx.xxxxxx" />
如果不配置的話 會導(dǎo)致失敗
spring配置多數(shù)據(jù)源問題,如何彼此隔離互相不影響
配置2個(gè)數(shù)據(jù)源,事物切面配置:“事物添加方法前綴”配置相同并且“事物的切入點(diǎn)”如下配置,如果其中任何一個(gè)數(shù)據(jù)源連接不上事物提交不了,數(shù)據(jù)保存不成功
事物添加方法前綴:
- 第一個(gè):方法前綴:save
<tx:advice id="shardTxAdvice" transaction-manager="shardTransactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> .......... .......... </tx:attributes> </tx:advice>
- 第二個(gè):方法前綴:save
<tx:advice id="qualTxAdvice" transaction-manager="qualTransactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> ......... ......... </tx:attributes> </tx:advice>
事物的切入點(diǎn):
<aop:config> <aop:pointcut id="bizMethods" expression="execution(* com.cn.*.service.*.*(..)) or execution(* com.cn.*.*.service.*.*(..)) or execution(* com.cn.*.*.*.*(..))" /> <aop:advisor advice-ref="shardTxAdvice" pointcut-ref="bizMethods" /> <aop:advisor advice-ref="qualTxAdvice" pointcut-ref="bizMethods" /> </aop:config>
方案一
如果確定了,其中一個(gè)數(shù)據(jù)源只查詢使用沒有數(shù)據(jù)維護(hù),不為其配置事物。
方案二
如果2數(shù)據(jù)源都需要對數(shù)據(jù)維護(hù),同時(shí)保證2個(gè)數(shù)據(jù)源的事物對所有的服務(wù)層一致,可以將2個(gè)數(shù)據(jù)源的事物添加方法前綴配置的不一樣.
這種情況下,試驗(yàn)中證明:
1:單獨(dú)操作其中一數(shù)據(jù)源的方法開啟事物,其他數(shù)據(jù)源連接失敗也不相互影響,
2:操作2個(gè)數(shù)據(jù)源的方法,其中任何一個(gè)數(shù)據(jù)連接失敗,事物仍然會回滾。
事物添加方法前綴:
- 第一個(gè):方法前綴:save
<tx:advice id="shardTxAdvice" transaction-manager="shardTransactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> .......... .......... </tx:attributes> </tx:advice>
- 第二個(gè):方法前綴:qual_save
<tx:advice id="qualTxAdvice" transaction-manager="qualTransactionManager"> <tx:attributes> <tx:method name="qual_save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> ......... ......... </tx:attributes> </tx:advice>
事物的切入點(diǎn):
不變,保證2個(gè)數(shù)據(jù)源事物對“所有的服務(wù)層一致”
<aop:config> <aop:pointcut id="bizMethods" expression="execution(* com.cn.*.service.*.*(..)) or execution(* com.cn.*.*.service.*.*(..)) or execution(* com.cn.*.*.*.*(..))" /> <aop:advisor advice-ref="shardTxAdvice" pointcut-ref="bizMethods" /> <aop:advisor advice-ref="qualTxAdvice" pointcut-ref="bizMethods" /> </aop:config>
方案三
事物添加方法前綴相同,修改不同事物的切入點(diǎn)
Spring的AOP應(yīng)該是可以把不同的事物,插入到不同的類和方法中。
<!-- 事務(wù)范圍aop--> 指定包下某個(gè)類的方法使用新的數(shù)據(jù)源事物 <aop:config> <aop:pointcut id="bigbizMethods" expression="execution(* com.cn.sp.sc.service..CouponBigDataService.*(..))" /> <aop:advisor advice-ref="qualTxAdvice" pointcut-ref="bigbizMethods" /> </aop:config>
也許有更好的方案解決,我實(shí)驗(yàn)是這3種情況下的方法。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中數(shù)組轉(zhuǎn)list的兩種簡單實(shí)現(xiàn)方式
這篇文章主要介紹了兩種將數(shù)組轉(zhuǎn)換為List的方法,兩種方法分別是使用Arrays.asList()方法和使用ArrayList構(gòu)造函數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03mybatis教程之resultmap_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了mybatis教程之resultmap,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09Eclipse手動導(dǎo)入DTD文件實(shí)現(xiàn)方法解析
這篇文章主要介紹了Eclipse手動導(dǎo)入DTD文件實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10java實(shí)現(xiàn)異步導(dǎo)出數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)異步導(dǎo)出數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11spring boot集成mongodb的增刪改查的示例代碼
這篇文章主要介紹了spring boot集成mongodb的增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03java web項(xiàng)目實(shí)現(xiàn)文件下載實(shí)例代碼
現(xiàn)在項(xiàng)目里面有個(gè)需求,需要把系統(tǒng)產(chǎn)生的日志文件給下載到本地 先獲取所有的日志文件列表,顯示到界面,選擇一個(gè)日志文件,把文件名傳到后臺2013-09-09Java Base64算法實(shí)際應(yīng)用之郵件發(fā)送實(shí)例分析
這篇文章主要介紹了Java Base64算法實(shí)際應(yīng)用之郵件發(fā)送,結(jié)合實(shí)例形式分析了java字符編碼與郵件發(fā)送相關(guān)操作技巧,需要的朋友可以參考下2019-09-09