黑马程序员技术交流社区
标题:
关于配置文件的内容动态加载
[打印本页]
作者:
chenjianxiang
时间:
2014-10-21 22:47
标题:
关于配置文件的内容动态加载
最近在公司的一个项目中,有一些数据需要经常进行修改(因为需求是经常变动的),如果将这些数据写死在程序中的话,那么每次进行更改后,都是需要重启Tomcat才能生效的。这样的话就不是很方便,如何实现更改数据之后,不重新启动tomcat呢?我目前的做法,是将这些配置文件放到一个config.properties文件中,然后单独启动一个线程(或者是实现一个“定时器”,比如quartz),定时的去读取这个配置文件,进行加载,然后更改程序中需要更改的数据的“缓存”!想问问大家,有没有更好的实现类似需求的思路,还望大家指教!
package com.spc.core.util;
import com.spc.core.consumer.SpcTaskResultConsumer;
import com.spc.core.service.SpcChargeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
public class ChangeNumThread extends Thread {
private Logger logger = LoggerFactory.getLogger(getClass());
private String url;
private long lastModifiedTime;
private SpcChargeService service;
public ChangeNumThread(SpcChargeService service, String url) {
this.service = service;
this.url = url;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1 * 1000);
File file = new File(url);
long currTime = file.lastModified();
if (lastModifiedTime != currTime && lastModifiedTime != 0) {
Properties p = new Properties();
p.load(new FileInputStream(file));
logger.info("修改了取单数");
service.updateGetOrderNum(Integer.parseInt(p.getProperty("getOrderNum")));
SpcTaskResultConsumer spcTaskResultConsumer = new SpcTaskResultConsumer();
logger.info("修改了卡密失效自动置成功的开关标志");
spcTaskResultConsumer.updateIsAutoSuccessOn(p.getProperty("isAutoSuccessOn"));
}
lastModifiedTime = currTime;
} catch (Exception e) {
logger.error("监控线程发生异常:", e);
}
}
}
}
复制代码
然后更改的“缓存”就是:
@Value("${getOrderNum}")
private int getOrderNum;
@Value("${confUrl}")
private String confUrl;
复制代码
这里使用了spring的一个@value的注解,读取配置文件的值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2