Spring多数据源导致配置失效的解决

 更新时间:2024年01月31日 14:38:37   作者:droidcoffee-  
这篇文章主要介绍了Spring多数据源导致配置失效的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

spring多数据源导致配置失效

<!-- 切换数据源 -->
	<bean id="dataSourceAdvice" class="com.xxxx.app.datasource.DataSourceAdvice" />
	<!-- 配置事务切面 -->
	<aop:config>
		<aop:pointcut id="serviceOperation" expression="execution(* com.xxxx..*.*(..))" />
		<aop:advisor pointcut-ref="serviceOperation" advice-ref="dataSourceAdvice" />
	</aop:config>

如果在springApplication.xml中配置的, 那么expression配置的相关的 包,必须在springmvc.xml中被扫描到

<context:component-scan base-package="com.xxxx.xxxxxx" />

如果不配置的话 会导致失败

spring配置多数据源问题,如何彼此隔离互相不影响

配置2个数据源,事物切面配置:“事物添加方法前缀”配置相同并且“事物的切入点”如下配置,如果其中任何一个数据源连接不上事物提交不了,数据保存不成功

事物添加方法前缀:

  • 第一个:方法前缀: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>
  • 第二个:方法前缀: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>

事物的切入点:

<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>

方案一

如果确定了,其中一个数据源只查询使用没有数据维护,不为其配置事物。

方案二

如果2数据源都需要对数据维护,同时保证2个数据源的事物对所有的服务层一致,可以将2个数据源的事物添加方法前缀配置的不一样.

这种情况下,试验中证明:

1:单独操作其中一数据源的方法开启事物,其他数据源连接失败也不相互影响,

2:操作2个数据源的方法,其中任何一个数据连接失败,事物仍然会回滚。

事物添加方法前缀:

  • 第一个:方法前缀: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>
  • 第二个:方法前缀: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>

事物的切入点:

不变,保证2个数据源事物对“所有的服务层一致”

<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>

方案三

事物添加方法前缀相同,修改不同事物的切入点

Spring的AOP应该是可以把不同的事物,插入到不同的类和方法中。

<!-- 事务范围aop--> 指定包下某个类的方法使用新的数据源事物
<aop:config>
<aop:pointcut id="bigbizMethods"
expression="execution(* com.cn.sp.sc.service..CouponBigDataService.*(..))" />
<aop:advisor advice-ref="qualTxAdvice" pointcut-ref="bigbizMethods" />
</aop:config>

也许有更好的方案解决,我实验是这3种情况下的方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中数组转list的两种简单实现方式

    Java中数组转list的两种简单实现方式

    这篇文章主要介绍了两种将数组转换为List的方法,两种方法分别是使用Arrays.asList()方法和使用ArrayList构造函数,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • Springboot 全局时间格式化操作

    Springboot 全局时间格式化操作

    这篇文章主要介绍了Springboot 全局时间格式化操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • mybatis教程之resultmap_动力节点Java学院整理

    mybatis教程之resultmap_动力节点Java学院整理

    这篇文章主要介绍了mybatis教程之resultmap,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Eclipse手动导入DTD文件实现方法解析

    Eclipse手动导入DTD文件实现方法解析

    这篇文章主要介绍了Eclipse手动导入DTD文件实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java实现异步导出数据

    java实现异步导出数据

    这篇文章主要为大家详细介绍了java实现异步导出数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • spring boot集成mongodb的增删改查的示例代码

    spring boot集成mongodb的增删改查的示例代码

    这篇文章主要介绍了spring boot集成mongodb的增删改查的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java之Spring简单的读取和存储对象

    Java之Spring简单的读取和存储对象

    这篇文章主要介绍了Spring的读取和存储对象,获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊,想进一步了解的同学可以参考本文
    2023-04-04
  • Spring读取配置文件属性实现方法

    Spring读取配置文件属性实现方法

    这篇文章主要介绍了Spring读取配置文件属性实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java web项目实现文件下载实例代码

    java web项目实现文件下载实例代码

    现在项目里面有个需求,需要把系统产生的日志文件给下载到本地 先获取所有的日志文件列表,显示到界面,选择一个日志文件,把文件名传到后台
    2013-09-09
  • Java Base64算法实际应用之邮件发送实例分析

    Java Base64算法实际应用之邮件发送实例分析

    这篇文章主要介绍了Java Base64算法实际应用之邮件发送,结合实例形式分析了java字符编码与邮件发送相关操作技巧,需要的朋友可以参考下
    2019-09-09

最新评论