spring配置多数据源,我用aop实现数据库的自动选择
为什么总是先先执行get方法后再执行set方法,完全搞反了 求高人指点~~~
这是我aop类的代码,其他的跟网上的一样
public class DaoAdvice implements MethodBeforeAdvice{
/**
* key是数据源
* values是daos,value 是daos,使用key的数据库的dao
*/
private static Map<String, String> dataSources;
public void before(Method method, Object[] args, Object obj) throws Throwable {
String classSimpleName = obj.getClass().getSimpleName();
String className = classSimpleName.substring(0, classSimpleName.length()-3);
Set<String> keys = dataSources.keySet();
for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
String dataSource = (String) iterator.next();
String daos = ","+dataSources.get(dataSource)+",";
if(daos.indexOf(className)!=-1){
CustomerContextHolder.setCustomerType("aop set Sql:"+dataSource);
System.out.println("aop自动选择sql:"+dataSource);
break;
}
}
}
public static Map<String, String> getDataSources() {
return dataSources;
}
public static void setDataSources(Map<String, String> dataSources) {
DaoAdvice.dataSources = dataSources;
}
为什么总是先先执行get方法后再执行set方法,完全搞反了 求高人指点~~~
这是我aop类的代码,其他的跟网上的一样
public class DaoAdvice implements MethodBeforeAdvice{
/**
* key是数据源
* values是daos,value 是daos,使用key的数据库的dao
*/
private static Map<String, String> dataSources;
public void before(Method method, Object[] args, Object obj) throws Throwable {
String classSimpleName = obj.getClass().getSimpleName();
String className = classSimpleName.substring(0, classSimpleName.length()-3);
Set<String> keys = dataSources.keySet();
for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
String dataSource = (String) iterator.next();
String daos = ","+dataSources.get(dataSource)+",";
if(daos.indexOf(className)!=-1){
CustomerContextHolder.setCustomerType("aop set Sql:"+dataSource);
System.out.println("aop自动选择sql:"+dataSource);
break;
}
}
}
public static Map<String, String> getDataSources() {
return dataSources;
}
public static void setDataSources(Map<String, String> dataSources) {
DaoAdvice.dataSources = dataSources;
}
动态路由获取数据源选择sql:null (get)
aop自动选择sql:dataSource2 (set)
当有两个语句执行时 先查询 在添加,aop2个通知
动态路由获取数据源选择sql:dataSource2 (get)
aop自动选择sql:dataSource1 (set)但是我想要的结果是先set再get