继续上篇文章加点东西玩玩 spring-boot+mybatis多数据源-简化配置过程https://mp.csdn.net/postedit/100708788
有了多数据源,自然要更有意思的切换来玩,单纯的拦截器根据入参中的值进行业务判断然后切换数据源是比较简单的套路,现在来试试如何更优雅的读写分离。
mybatis提供了拦截器插件,牛逼。直接拦截sql语句,如果是读的就切到db2,写的就切到db1.就这个思路
直接上代码
拦截器
@Intercepts({
@Signature(
type = StatementHandler.class,
method = "query",
args = {Statement.class,ResultHandler.class})
})
public class MybatisInterceptor implements Interceptor {
public static final Logger log = LoggerFactory.getLogger(MybatisInterceptor.class);
@Override
public Object intercept(Invocation invocation) throws Throwable {
String sql = ((StatementHandler)invocation.getTarget()).getBoundSql().getSql();
if(isQuery(sql)){
DBUtils.setDB("db2");
}else{
DBUtils.setDB("db1");
}
log.info("execute d