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种情况下的方法。

总结

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

相关文章

  • SpringBoot Web详解静态资源规则与定制化处理

    SpringBoot Web详解静态资源规则与定制化处理

    这篇文章主要介绍了SpringBoot web场景的静态资源规则与定制化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Spring框架中一个有用的小组件之Spring Retry组件详解

    Spring框架中一个有用的小组件之Spring Retry组件详解

    Spring Retry 是从 Spring batch 中独立出来的一个功能,主要实现了重试和熔断,对于那些重试后不会改变结果,毫无意义的操作,不建议使用重试,今天通过本文给大家介绍Spring Retry组件详解,感兴趣的朋友一起看看吧
    2021-07-07
  • 关于@DS注解切换数据源失败的原因实战记录

    关于@DS注解切换数据源失败的原因实战记录

    项目配置了多个数据源,需要使用@DS注解来切换数据源,但是却遇到了问题,下面这篇文章主要给大家介绍了关于@DS注解切换数据源失败原因的相关资料,需要的朋友可以参考下
    2023-05-05
  • Hibernate核心类和接口的详细介绍

    Hibernate核心类和接口的详细介绍

    今天小编就为大家分享一篇关于Hibernate核心类和接口的详细介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • SpringBoot Redis配置多数据源的项目实践

    SpringBoot Redis配置多数据源的项目实践

    springboot中默认的redis配置是只能对单个redis库进行操作的, 那么我们需要多个库操作的时候这个时候就可以采用redis多数据源 ,本文就介绍了SpringBoot Redis配置多数据源,感兴趣的可以了解一下
    2023-07-07
  • Java用三元运算符判断奇数和偶数的简单实现

    Java用三元运算符判断奇数和偶数的简单实现

    这篇文章主要介绍了Java用三元运算符判断奇数和偶数的简单实现,需要的朋友可以参考下
    2014-02-02
  • Java面试题冲刺第十五天--设计模式

    Java面试题冲刺第十五天--设计模式

    这篇文章主要为大家分享了最有价值的三道关于设计模式的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java异常详解_动力节点Java学院整理

    Java异常详解_动力节点Java学院整理

    异常是Java语言中的一部分,它代表程序中由各种原因引起的“不正常”因素。下面通过本文给大家介绍java异常的相关知识,感兴趣的朋友一起看看吧
    2017-06-06
  • 通过Class类获取对象(实例讲解)

    通过Class类获取对象(实例讲解)

    下面小编就为大家带来一篇通过Class类获取对象(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • SpringMVC实现获取请求参数方法详解

    SpringMVC实现获取请求参数方法详解

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,Spring MVC 角色划分清晰,分工明细,这篇文章主要介绍了SpringMVC实现获取请求参数方法
    2022-09-09

最新评论