上一篇讲了《基于注解的Spring多数据源配置和使用》,通过在类或者方法上添加@DataSource注解就可以指定某个数据源。这种方式的优点是控制粒度细,也更灵活。

但是当有些时候项目分模块开发,可能某一个模块只访问同一个数据源,这种场景下如果使用注解的话就要在这个模块下的所有dao接口都增加注解@DataSource,就会显得繁琐。

如果能直接在配置文件中一次性配置好,不用在每个类都添加注解岂不是更好?当然也是可以的^_^。

首先,再创建一个AOP切面DataSourceAspect2,代码如下:

 public class DataSourceAspect2 {

     /**
* 设置数据源dataSource1
*
* @param point
*/
public void setDataSource1(JoinPoint point) {
DynamicDataSourceHolder.setDataSource("dataSource1");
} /**
* 设置数据源dataSource2
*
* @param point
*/
public void setDataSource2(JoinPoint point) {
DynamicDataSourceHolder.setDataSource("dataSource1");
} }

然后,配置这个切面的bean和拦截规则,xml配置如下:

 <bean id="dataSourceAspect2" class="com.test.context.datasource.DataSourceAspect2" />
<aop:config>
<aop:aspect ref="dataSourceAspect2">
<!-- 拦截ds1模块下的所有方法 -->
<aop:pointcut id="dataSource1Pointcut" expression="execution(* com.test.ds1.*.*(..))" />
<!-- 拦截ds2模块下的所有方法 -->
<aop:pointcut id=" dataSource2Pointcut" expression="execution(* com.test.ds2.*.*(..))" />
<!-- 拦截到ds1模块后,在方法执行前先调用DataSourceAspect2里的setDataSource1设置数据源标识为dataSource1 -->
<aop:before pointcut-ref="dataSource1Pointcut" method="setDataSource1" />
<!-- 拦截到ds2模块后,在方法执行前先调用DataSourceAspect2里的setDataSource2设置数据源标识为dataSource2 -->
<aop:before pointcut-ref="dataSource1Pointcut" method="setDataSource2" />
</aop:aspect>
</aop:config>

这样配置好之后,每个模块下的dao就只访问指定的数据源了。以后如果再增加数据源dataSource3,则在DataSourceAspect2类里增加一个方法setDataSource3(JoinPoint point),

并在上面的配置中增加类似的拦截规则就可以了。

假如使用了xml的方式配置了ds1模块使用数据源dataSource1了,而ds1模块下的某个方法a又需要访问数据源dataSource2,这时可以单独在a上使用注解@DataSource指定数据源。

也就是说注解和xml配置两种方式可以同时使用(但不建议这样),至于两者哪个的优先级更高,可以通过配置aop:aspect里的order参数进行指定。

基于xml的Spring多数据源配置和使用的更多相关文章

  1. 基于注解的Spring多数据源配置和使用(非事务)

    原文:基于注解的Spring多数据源配置和使用 1.创建DynamicDataSource类,继承AbstractRoutingDataSource package com.rps.dataSourc ...

  2. 基于注解的Spring多数据源配置和使用

    前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备.由于之前做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多 ...

  3. spring基于通用Dao的多数据源配置详解【ds1】

    spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种 ...

  4. 基于注解的Spring AOP的配置和使用

    摘要: 基于注解的Spring AOP的配置和使用 AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不 ...

  5. spring(16)------spring的数据源配置

    在spring中,通过XML的形式实现数据源的注入有三种形式. 一.使用spring自带的DriverManagerDataSource 使用DriverManagerDataSource配置数据源与 ...

  6. spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置

    spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...

  7. 基于注解实现SpringBoot多数据源配置

    1.功能介绍 在实际的开发中,同一个项目中使用多个数据源是很常见的场景.最近在学习的过程中使用注解的方式实现了一个Springboot项目多数据源的功能.具体实现方式如下. 2.在applicatio ...

  8. Spring 多数据源配置(转)

    转载自:https://www.cnblogs.com/digdeep/p/4512368.html 同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据 ...

  9. Spring jndi数据源配置方法

    xml配置: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverMana ...

随机推荐

  1. GJM :多人在线游戏的设计思路

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  2. SDWebImage添加header

    title: SDWebImage添加headerdate: 2016-03-07 17:32:57tags: SDWebImagecategories: IOS keywords: SDWebIma ...

  3. 好用的第三方控件,Xcode插件(不断更新)

    第三方控件类:   1.提示框 MBProgressHUD: 是一款非常强大的.提供多种样式的提示框.使用起来简单.方便.可以在GitHub上查看具体的使用方法. https://github.com ...

  4. Intent属性详解三 data、type和extra

    1 Data  执行时要操作的数据 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”.“ht ...

  5. GPU大百科全书索引(有助于理解openGL工作流程)

    GPU大百科全书索引 0.GPU大百科全书 前传 看图形与装修的关系 1.GPU大百科全书 第一章:美女 方程与几何 2.GPU大百科全书 第二章 凝固生命的光栅化 3.GPU大百科全书 第三章:像素 ...

  6. 基于 AVPlayer 自定义播放器

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  7. Android Studio导入Vitamio多媒体开发框架

    PS:这篇笔记用于解决Android Studio导入Vitamio框架的问题.官网给出的相关说明过于简单,故整理这篇文章,希望能帮助到像我一样遇到这个问题的朋友. 开发学习建议参考农民伯伯的博客中的 ...

  8. 正则表达式的JS验证

    /判断输入内容是否为空    function IsNull(){        var str = document.getElementById('str').value.trim();      ...

  9. Unable to determine if the owner (Domain\UserName) of job JOB_NAME has server access

    早上巡检的的时候,发现一数据库的作业报如下错误(作业名等敏感信息已经替换),该作业的OWNER为一个域账号: JOB RUN: 'JOB_NAME' was run on 2016-6-1 at 7: ...

  10. W3School-CSS 尺寸 (Dimension) 实例

    CSS 尺寸 (Dimension) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 C ...