首页 技术 正文
技术 2022年11月8日
0 收藏 984 点赞 1,356 浏览 1531 个字

上一篇讲了《基于注解的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参数进行指定。

上一篇: Linux系统1.md
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289