java数据源切换。
今天碰到了。
先说下原理。。
首先 ,必要的条件
数据库里面的表结构是一样的。。
只是数据库名字不一样,
而且这名字也是有规律(无规律也行)的。。
因为数据库多
所以读取的时候需要用到数据源切换。。
举个例子:
就说下
例如我经常玩的dnf游戏。。
dnf游戏 不是有很多区吗,
有福建一区,福建二区,福建三区
他们的表结构都是一样的。。
不一样的话,
游戏就同步了。。
切换数据源相当于换服
具体做法
可以根据查询 含某个方法时进行切换
用这个类 ComboPooledDataSource 进行数据切换
这里只截取一段。。
String tUrl = "jdbc:mysql://"+动态参数+"/"+动态参数+"?useUnicode=true&characterEncoding=utf-8"; pooledDataSource.setDriverClass("com.mysql.jdbc.Driver"); pooledDataSource.setJdbcUrl(tUrl); pooledDataSource.setUser(用户名字); pooledDataSource.setPassword(密码);
// service方法执行之前被调用
重要的是 利用aop 判断 参数进行转换。。
public void before(Method method, Object[] args, Object target) throws Throwable { String sourceName="master"; if(method.getName().toLowerCase().indexOf("yq1012")>=0){ if(args.length>1){ Object obj = args[args.length-1]; if (obj instanceof String && obj.toString().toLowerCase().startsWith("数据库名字_标识")) { sourceName=obj.toString().toLowerCase(); } } } if(sourceName!=null){ DataSourceSwitcher.setDataSource(sourceName); }else{ DataSourceSwitcher.setMaster(); } }
先判断执行的方法有没有包含yq1012
如果有的话,再根据参数去判断是不是需要切换数据源