这个错误开始我查了好多资料,以为是配置原因,因为我这个项目用的数据库并不是一个,后来发现是因为没有转换数据库的原因!
控制层需要调用工具类
ChangeDataSource.changeDataSource(DataSource.dataSource2);
Users user = baseService.getUser(request, token);
id=String.valueOf(user.getUserId());
工具类代码
package com.utils;
import com.dao.DataSource;
import com.dao.DataSourceHolder;
public class ChangeDataSource {
/**
* 切换数据源的方法,可以是在方法开始前,方法执行中,或者方法执行后
* @param sourceName 数据源名称
*/
public static void changeDataSource(String sourceName){
if(existsField(sourceName))
DataSourceHolder.setDataSource(sourceName);
else DataSourceHolder.setDataSource(DataSource.dataSource1);
}
/**
* 监测输入的数据源是否存在
* @param fieldName 数据源名称
* @return 返回监测状态,存在返回true,不存在返回false
*/
public static boolean existsField(String fieldName){
Class clz=DataSource.class;
try{
return clz.getDeclaredField(fieldName)!=null;
}
catch(Exception e){
}
return false;
}
}
package com.dao;
/**
* 数据源操作
* @author linhy
*/
public class DataSourceHolder {
//线程本地环境
private static final ThreadLocal<String> dataSources = new ThreadLocal<String>();
//设置数据源
public static void setDataSource(String customerType) {
dataSources.set(customerType);
}
//获取数据源
public static String getDataSource() {
return dataSources.get();
}
//清除数据源
public static void clearDataSource() {
dataSources.remove();
}
}
package com.dao;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
String name() default DataSource.dataSource1;
public static String dataSource1 = "dataSource1";
public static String dataSource2 = "dataSource2";
}