代码中涉及到的redis的东西都可以删除,主要在文件监听和文件加载这些地方
Controller层
File file = new File("配置文件url");
JSONObject jsonObject = fileLinstenerService.fileChangeDoSomething(file);
Service层
@Autowired
RedisUtils redisUtils;
private Map<String,Long> configFileModifyDate = new HashMap<String, Long>();
@Override
public JSONObject fileChangeDoSomething(File file) {
return this.loadAllConfigFiles(file);
}
/**
* 检查系统配置文件,并更新全局变量 。
* @throws Exception
* @date 2012-8-31
*/
private JSONObject loadAllConfigFiles(File file){
String name = file.getName();
String fullPath = file.getAbsolutePath();
JSONObject jsonObject = null;
if(name.matches("^flowsurvey.*\\.properties$")){//properties,配置文件
Long value = configFileModifyDate.get(fullPath);
if(value==null || value.longValue()!=file.lastModified()){
jsonObject = loadPropertieFile(file);
System.out.println("loadAllConfigFiles-"+file);
LOGGER.info("更新的文件为:{}",file);
configFileModifyDate.put(fullPath,file.lastModified());
}
}
return jsonObject;
}
/**
* 加载配置文件到SYSTEM_CONFIG
* @date 2012-8-31
* @param configFile 系统配置文件以 sys*.properties命名。
*/
private JSONObject loadPropertieFile(File configFile) {
try {
Properties properties = PropertiesLoaderUtils.loadProperties(new FileSystemResource(configFile));
JSONObject jsonObject = new JSONObject();
redisUtils.deleteKey("Smk_Flowsurvey_Subject_Tip");
for(String key:properties.stringPropertyNames()){
String value=properties.getProperty(key);
if (key.equals("key1")){
jsonObject.put("middleRisk",value);
}
if (key.equals("key2")){
jsonObject.put("highRisk",value);
}
}
redisUtils.set("redis中存储的key", jsonObject.toJSONString());
LOGGER.info(configFile+"-更新以后的信息为:{}",jsonObject.toJSONString());
return jsonObject;
} catch (IOException e) {
e.printStackTrace();
LOGGER.info("更新配置文件异常{}",e.getMessage());
return new JSONObject();
}
}
编写文件监听器
@Configuration
public class FileListener extends FileAlterationListenerAdaptor {
@Autowired
FileLinstenerService fileLinstenerService;
public FileListener(FileLinstenerService fileLinstenerService){
this.fileLinstenerService = fileLinstenerService;
}
// 文件创建执行
@Override
public void onFileCreate(File file) {
System.out.println(" onFileCreate");
}
// 文件创建修改
@Override
public void onFileChange(File file) {
// 触发业务
fileLinstenerService.fileChangeDoSomething(file);
}
// 文件创建删除
@Override
public void onFileDelete(File file) {
System.out.println(" 文件创建删除");
}
// 目录创建
@Override
public void onDirectoryCreate(File directory) {
System.out.println(" 目录创建");
}
// 目录修改
@Override
public void onDirectoryChange(File directory) {
}
// 目录删除
@Override
public void onDirectoryDelete(File directory) {
}
// 轮询开始
@Override
public void onStart(FileAlterationObserver observer) {
}
// 轮询结束
@Override
public void onStop(FileAlterationObserver observer) {
}
}
设置监听工厂
@Component
public class FileListenerFactory {
//设置监听路径
private final String listenerPath = "./";
//设置轮询间隔
private final long interval = TimeUnit.SECONDS.toMillis(1);
//自动注入业务服务
@Autowired
FileLinstenerService fileLinstenerService;
public FileAlterationMonitor getMonitor(){
System.out.println("listenerPath"+listenerPath);
System.out.println("getMonitor");
//创建过滤器
IOFileFilter directories = FileFilterUtils
.and(FileFilterUtils.directoryFileFilter(), HiddenFileFilter.VISIBLE);
IOFileFilter fileFilter = FileFilterUtils
.and(FileFilterUtils.fileFileFilter(),FileFilterUtils.suffixFileFilter(".properties"));
IOFileFilter filter = FileFilterUtils.or(directories,fileFilter);
//装配过滤器
FileAlterationObserver observer = new FileAlterationObserver(new File(listenerPath),filter);
//向监听者添加业务监听器,并注入业务服务
observer.addListener(new FileListener(fileLinstenerService));
//返回监听者
return new FileAlterationMonitor(interval,observer);
}
}
设置文件监听自启动
@Component
public class FileListenerRunner implements CommandLineRunner {
@Autowired
FileListenerFactory fileListenerFactory;
@Override
public void run(String... args) throws Exception {
try {
System.out.println("FileListenerRunner");
FileAlterationMonitor monitor = fileListenerFactory.getMonitor();
monitor.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}