在上一节中,我们讲述了多数据的情况:1. 数据源不同(数据库厂商不同, 业务范围不同, 业务数据不同)2. SQL mapper 文件不同,3. mybatis + 数据方言不同即最为简单的多数据, 将多个数据源叠加在一起,不同service---》dao--->sessi ...
在上一节中,我们讲述了多数据的情况:
1. 数据源不同(数据库厂商不同, 业务范围不同, 业务数据不同)
2. SQL mapper 文件不同,
3. mybatis + 数据方言不同
即最为简单的多数据, 将多个数据源叠加在一起,不同service---》dao--->sessionFactory;
如果上述的所有条件都相同,仅仅是数据的的多个拷贝情况,想做主备(读写分离),那我们当然可以用2套复制的代码和配置,但是显然不是最佳的实现方式。
这里,我们就讲解一下多数据源的读写分离,怎么实现。
首先,我们从读写分离的入口来看, 读read (对应JAVA/ getXXX, queryXXX), 写write(对应updateXXX, insertXXX), 如果能在这些方法执行时,自动切换到只读数据库/只写数据,那么就可以实现读写分离, 那我们自然可以想到spring 的AOP, 并以annotation的方式实现。
具体实现步骤如下:
1. 实现自定义的数据源注解: @DataSource("read") / @DataSource("write")
1 package com.robin.it.ds; 2 3 import java.lang.annotation.Retention; 4 import java.lang.annotation.Target; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.ElementType; 7 /** 8 * RUNTIME 9 * 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。 10 * @author Robin.yi 11 * 12 */ 13 14 @Retention(RetentionPolicy.RUNTIME) 15 @Target(ElementType.METHOD) 16 public @interface DataSource {17 String value(); 18 }
原标题:Spring 数据源配置三:多数据源
关键词:Spring
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。