基于xml的Spring多数据源配置和使用
2015-11-29 18:42
141 查看
上一篇讲了《基于注解的Spring多数据源配置和使用》,通过在类或者方法上添加@DataSource注解就可以指定某个数据源。这种方式的优点是控制粒度细,也更灵活。
但是当有些时候项目分模块开发,可能某一个模块只访问同一个数据源,这种场景下如果使用注解的话就要在这个模块下的所有dao接口都增加注解@DataSource,就会显得繁琐。
如果能直接在配置文件中一次性配置好,不用在每个类都添加注解岂不是更好?当然也是可以的^_^。
首先,再创建一个AOP切面DataSourceAspect2,代码如下:
然后,配置这个切面的bean和拦截规则,xml配置如下:
这样配置好之后,每个模块下的dao就只访问指定的数据源了。以后如果再增加数据源dataSource3,则在DataSourceAspect2类里增加一个方法setDataSource3(JoinPoint point),
并在上面的配置中增加类似的拦截规则就可以了。
假如使用了xml的方式配置了ds1模块使用数据源dataSource1了,而ds1模块下的某个方法a又需要访问数据源dataSource2,这时可以单独在a上使用注解@DataSource指定数据源。
也就是说注解和xml配置两种方式可以同时使用(但不建议这样),至于两者哪个的优先级更高,可以通过配置aop:aspect里的order参数进行指定。
但是当有些时候项目分模块开发,可能某一个模块只访问同一个数据源,这种场景下如果使用注解的话就要在这个模块下的所有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参数进行指定。
相关文章推荐
- JAVA面向对象(一)
- Java语法基础
- 初试springWebMVC
- 如何在Java中使用注释
- eclipse
- Spring Data jpa 中@Column 注解解释
- Intellij Idea 将java项目打包成jar
- java基本类型赋值操作的原子性
- java 泛型
- 解决struts2以GET方式提交表单中文乱码问题
- Hibernate和Spring 缓存的二十二问,干货分享
- 基本数据类型和引用数据类型的内存传递的变化
- JAVA 堆栈 堆 方法区 解析
- 在Spring MVC中使用Velocity
- Java中的接口
- JAVA + MYSQL UTF-8 中文 不再乱码
- JAVA基础积累(程序运行时对象是怎么放置安排,内存是如何分配?)
- 转:JAVA 堆栈 堆 方法区 静态区 final static 内存分配 详解
- 9. Spring Security Filter
- 10. Spring Security 退出登录logout