package com.aijia.kmt.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
*
* 类名称:SystemResourceLocator
* 类描述:系统属性资源存储类.
* 便于在其他地方调用,但添加的时候不能有重名.除非显示调用需要覆盖的接口
*
* @version v1.0
*
*/
@Component
public class SystemResourceLocator implements ApplicationContextAware {
/**
* spring的容器上下文
*/
private static ApplicationContext context;
/**
* 实例化,执行非静态变量块
*/
private static SystemResourceLocator instance = new SystemResourceLocator();
public static RedisUtil redisUtil = null;
private static String versionKey = "VERSION_*";
public static final SystemResourceLocator getInstance() {
return instance;
}
@PostConstruct
public void init() {
// 启动各子项目时:全量添加到redis,为保证数据的统一,覆盖旧数据,其它系统更新配置的时候一定要先同步更新到数据库
redisUtil = (RedisUtil) SystemResourceLocator.getBean(RedisUtil.class);
}
// /**
// * 取指定科目的版本列表
// * @param courseName
// * @return
// */
// public synchronized static Map> getVersionList(String courseName) {
//
// Map> maps=new LinkedHashMap>();
// TreeSet keys=redisUtil.keys(versionKey);
// for (String key : keys) {
// try {
// if (redisUtil.exists(key.toString())){
// String result = redisUtil.get(key.toString());
// if(StringUtil.isNotEmpty(result)){
// VersionConfig versionConfig=JSONObject.parseObject(result, VersionConfig.class);
// if(StringUtil.isNotEmpty(courseName)){
// if(!courseName.equals(versionConfig.getCourseName())){
// continue;
// }
// }
// if(maps.containsKey(versionConfig.getCourseName())){
// maps.get(versionConfig.getCourseName()).add(versionConfig);
// }else{
// List list=new ArrayList();
// list.add(versionConfig);
// maps.put(versionConfig.getCourseName(), list);
// }
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// return maps;
// }
//
// /**
// * 取全部科目的版本列表
// * @param
// * @return
// */
// public synchronized static Map> getVersionList() {
// return getVersionList(null);
// }
/**
* 取值
*
* @param key
* @return
*/
public synchronized static Object getValue(Object key) {
Object result = null;
if (redisUtil.exists(key.toString())) {
result = redisUtil.get(key.toString());
}
return result;
}
/**
* 添加系统属性
*
* @param key
* @param value
*/
public synchronized static void setValue(Object key, Object value) {
setValue(key, value, false);
}
/**
* 添加系统属性
*
* @param key
* @param value
* @param isCover 是否可以覆盖
*/
public synchronized static void setValue(Object key, Object value, boolean isCover) {
if (!isCover && redisUtil.exists(key.toString())) {
throw new RuntimeException("系统已存在属性" + key + ",不能覆盖该项值.");
} else {
redisUtil.set(key.toString(), value.toString());
}
}
@Override
public void setApplicationContext(ApplicationContext contex) throws BeansException {
SystemResourceLocator.context = contex;
}
/**
* 通过bean名称获取bean
*
* @param beanName
* @return
*/
public synchronized static Object getBean(String beanName) {
return context.getBean(beanName);
}
/**
* 通过class名称获取bean
*
* @param
* @return
*/
public static T getBean(Class requiredType) {
return getBean(requiredType, "1.0");
}
public static T getBean(Class requiredType, String version) {
return context.getBean(requiredType);
}
/**
* 通过bean名称及类型获取bean
*
* @param beanName
* @param requiredType
* @return
*/
public synchronized static Object getBean(String beanName, Class> requiredType) {
return context.getBean(beanName, requiredType);
}
}