非spring管理的类获取spring配置参数
您好,项目时当初遇到了一个问题,就是用mybaties拦截器获取所有日志的sql并记录进入日志系统时,需要读取spring的yml配置参数。发现网上教的大部分方法都无效(@Value等)。究其原因,发现,大部分方法都是基于spring管理的类获取配置参数,其方法可行,而此处的mybaties拦截器无法交给spring管理(其原因尚未可知,感兴趣可以自行查看),所以通常方法无法获取。
于是经过多次尝试,发现,可以通过SpringContextHolder获取Environment。当我们成功获取到Environment时,问题就有希望了。
一下时我获取配置文件中的mass.log.sql值。代码如下:
private Boolean getSqlLog() {
/**
* 获取Environment
* */
Environment env = SpringContextHolder.getBean("environment");
/**
* 获取配置文件列表
* */
Object propertySources = BeanUtil.getProperty(env,"propertySources");
List<Object> list = BeanUtil.getProperty(propertySources,"propertySourceList");
/**
* 初始化sqlLog false
* */
Boolean sqlLog = false;
/**
* 从配置文件列表中找mass.log.sql属性,找到后返回
* */
for (Object object : list){
if(object instanceof EncryptableEnumerablePropertySourceWrapper){
EncryptableEnumerablePropertySourceWrapper wapper = (EncryptableEnumerablePropertySourceWrapper) object;
Object _sqlLog = wapper.getProperty("mass.log.sql");
if(_sqlLog!=null){
sqlLog = Boolean.valueOf(String.valueOf(_sqlLog));
break;
}
}
}
return sqlLog;
}
希望对大家有所帮助。