package com.autfish;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.util.ResourceUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;
/**
* Created by autfish on 2017/1/17.
*/
public class SystemConfig {
private static Logger logger = LogManager.getLogger("system");
private static Properties props = new Properties();
private File configFile = null;
public SystemConfig(String filePath) {
try {
this.configFile = ResourceUtils.getFile(filePath);
this.refresh();
} catch (FileNotFoundException e) {
logger.error(e);
logger.warn("file [" + filePath + "] not found!");
this.configFile = null;
}
}
public void refresh() {
if (this.configFile != null)
SystemConfig.loadConfig(this.configFile);
else
logger.warn("load configuration file failed!");
}
private static void loadConfig(File configFile) {
try (FileInputStream fis = new FileInputStream(configFile) {
@Override
public void close() { }
}) {
if (props.isEmpty()) {
props.load(fis);
} else {
Properties temp = new Properties();
temp.load(fis);
for (Object key : temp.keySet()) {
String value = temp.getProperty(key.toString());
if (props.getProperty(key.toString()) != null && !props.getProperty(key.toString()).equals(value)) {
props.setProperty(key.toString(), value);
logger.info("property changed: " + key.toString() + "=" + value);
}
}
}
} catch (Exception e) {
logger.error(e);
}
}
public static boolean isDebug() {
return BooleanUtils.toBoolean(props.getProperty("debug"));
}
}
使用quartz实现不重启服务器修改自定义配置的示例



Quartz是一个开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java应用中,Quartz常被用来实现复杂的时间调度逻辑,比如定时发送邮件、执行数据同步等。在很多场景下,我们可能需要动态地修改任务的配置,而无需重启服务器。这个示例就是关于如何在不重启服务器的情况下,利用Quartz实现自定义配置的更改。 我们需要了解Quartz的基本概念: 1. **Job**:是实际执行的任务,实现了`org.quartz.Job`接口。 2. **Trigger**:定义了任务何时运行,可以是简单触发器或cron触发器。 3. **Scheduler**:负责安排Job和Trigger,是Quartz的核心。 在不重启服务器的情况下,关键在于如何动态更新配置。以下是实现步骤: 1. **配置加载**:在应用启动时,从数据库、配置文件或其他持久化存储中加载任务和触发器的配置。这些配置应包括Job类、触发规则等信息。 2. **创建Scheduler实例**:使用`StdSchedulerFactory`创建`Scheduler`实例,并启动它。 3. **定义Job和Trigger**:根据加载的配置,创建`JobDetail`对象表示Job,创建`Trigger`对象表示触发规则。 4. **调度任务**:使用`Scheduler`的`scheduleJob()`方法将Job和Trigger关联起来,将其添加到调度中。 当需要修改配置时,可以按照以下步骤操作: 1. **更新配置**:在数据库或配置文件中修改Job或Trigger的相关设置,例如修改触发时间、增加新的任务等。 2. **获取Scheduler实例**:通过`Scheduler`的`getScheduler()`方法获取当前运行的Scheduler实例。 3. **重新加载配置**:从新的配置源读取改动后的配置。 4. **暂停和移除原有任务**:调用`Scheduler`的`pauseJob()`和`unscheduleJob()`方法暂停并移除需要更新的Job和Trigger。 5. **重新定义Job和Trigger**:根据新配置创建新的`JobDetail`和`Trigger`对象。 6. **重新调度任务**:使用`Scheduler`的`rescheduleJob()`方法重新安排Trigger,或者`scheduleJob()`方法重新添加Job和Trigger。 在示例项目`demo-web`中,可能包含以下部分: - **配置文件**:如`quartz.properties`,用于配置Quartz的基本设置。 - **Job类**:自定义的Job实现,如`MyTaskJob`,实现了`Job`接口并覆盖`execute()`方法。 - **Trigger类**:定义任务的触发规则,如`MyTaskTrigger`,可能是基于cron表达式的触发器。 - **调度服务**:包含加载配置、创建Scheduler、调度任务以及更新任务的逻辑。 - **控制器或API**:提供接口用于外部修改任务配置,如`TaskController`,接收请求并调用调度服务更新任务。 通过这样的设计,开发者可以在运行时动态地调整任务配置,提高了系统的灵活性和可维护性。不过,需要注意的是,这种方式可能导致并发问题,因此在更新配置时需要做好同步控制,避免数据冲突。此外,如果任务数量庞大,频繁的调度操作可能对系统性能产生影响,需要权衡利弊。












































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- weixin_373590952017-01-17还不错。。适用
- 翟凤玺2017-10-26怎么下载下来是demo-web.htm 打开404

- 粉丝: 904
- 资源: 14
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于PLC的糖果包装控制系统详解:梯形图程序、接线图与IO配置实践指南,基于PLC的糖果包装控制综合解决方案:涵盖梯形图编程、接线原理图与IO分配等关键技术,附带组态画面设计,S7-200 基于PLC
- 【9247】基于Springboot+vue的人事管理系统.zip
- 3DianCan.ipynb
- 【9248】基于Springboot+vue的校园资产管理.zip
- 【9250】基于Springboot+vue的智慧校园之家长子系统.zip
- ITSS运维业务发展历程-文档模板
- 基于S7-300 PLC和MCGS组态的热电厂输煤控制系统全套图纸及程序解释,基于S7-300 PLC和MCGS组态的热电厂输煤控制系统全套图纸及程序详解,No.812 基于S7-300 PLC和MC
- 【9249】基于Springboot+vue的在线互动学习网站设计.zip
- unity dotweenpro插件分享
- 【9251】基于Springboot+vue的毕业论文管理系统.zip
- 【9252】基于Springboot+vue的餐饮管理系统的设计与实现.zip
- 【9253】基于Springboot+vue的社区养老服务系统.zip
- IT服务管理中的服务目录控制程序-规范运维服务目录全生命周期管理
- 基于PLC控制的智能楼宇消防系统:组态王S7-200应用详解及程序图纸集合,基于PLC控制的智能楼宇消防系统:组态王梯形图程序、接线图与原理图详解及组态画面展示,No.259 S7-200 组态王 基
- 程序跟踪技能的个性化自适应教程
- 【9254】基于Springboot+vue的小区团购管理.zip


