A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenjianxiang 中级黑马   /  2014-10-21 22:47  /  999 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在公司的一个项目中,有一些数据需要经常进行修改(因为需求是经常变动的),如果将这些数据写死在程序中的话,那么每次进行更改后,都是需要重启Tomcat才能生效的。这样的话就不是很方便,如何实现更改数据之后,不重新启动tomcat呢?我目前的做法,是将这些配置文件放到一个config.properties文件中,然后单独启动一个线程(或者是实现一个“定时器”,比如quartz),定时的去读取这个配置文件,进行加载,然后更改程序中需要更改的数据的“缓存”!想问问大家,有没有更好的实现类似需求的思路,还望大家指教!
  1. package com.spc.core.util;

  2. import com.spc.core.consumer.SpcTaskResultConsumer;
  3. import com.spc.core.service.SpcChargeService;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;

  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.util.Properties;

  9. public class ChangeNumThread extends Thread {

  10.     private Logger logger = LoggerFactory.getLogger(getClass());

  11.     private String url;

  12.     private long lastModifiedTime;

  13.     private SpcChargeService service;

  14.     public ChangeNumThread(SpcChargeService service, String url) {
  15.         this.service = service;
  16.         this.url = url;
  17.     }

  18.     @Override
  19.     public void run() {
  20.         while (true) {
  21.             try {
  22.                 Thread.sleep(1 * 1000);
  23.                 File file = new File(url);
  24.                 long currTime = file.lastModified();
  25.                 if (lastModifiedTime != currTime && lastModifiedTime != 0) {
  26.                     Properties p = new Properties();
  27.                     p.load(new FileInputStream(file));
  28.                     logger.info("修改了取单数");
  29.                     service.updateGetOrderNum(Integer.parseInt(p.getProperty("getOrderNum")));
  30.                     SpcTaskResultConsumer spcTaskResultConsumer = new SpcTaskResultConsumer();
  31.                     logger.info("修改了卡密失效自动置成功的开关标志");
  32.                     spcTaskResultConsumer.updateIsAutoSuccessOn(p.getProperty("isAutoSuccessOn"));
  33.                 }
  34.                 lastModifiedTime = currTime;
  35.             } catch (Exception e) {
  36.                 logger.error("监控线程发生异常:", e);
  37.             }
  38.         }
  39.     }

  40. }
复制代码

然后更改的“缓存”就是:

  1.     @Value("${getOrderNum}")
  2.     private int getOrderNum;

  3.     @Value("${confUrl}")
  4.     private String confUrl;
复制代码
这里使用了spring的一个@value的注解,读取配置文件的值。


评分

参与人数 2黑马币 +60 收起 理由
疯狂的土贼 + 40 神马都是浮云
.Mr + 20 很给力!实用

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马