1.需求说明


主要负责项目任务调度。使用Quartz。以Spring为辅助。

如今有这样一个需求:我们不知道管理员想设定过多厂时间运行主任务,须要在配置文件定义。在配置好后须要马上运行。实现热部署。



2.设计


在主调度加一个方法,此方法先检測配置文件是否更改。若更改则将调度时间又一次设置,又一次启用调度任务

3.实现


在PropertiesUtil定义一一个初始时间,改时间在这个类初始化之前运行。也就是在静态代码块运行,代码例如以下:
private static long curModifiedTime;
static {
try {
curModifiedTime = new File(filePath).lastModified();
System.out.println("当前文件改动时间为 " +curModifiedTime);
} catch (Exception e) {
e.printStackTrace();
} }

此时获取到文件本来的时间


写一个方法来推断配置文件是否改动:
public static boolean isModifiedValue()
{
boolean flag = false;
long lastModifiedTime = new File(filePath).lastModified();
if(lastModifiedTime > curModifiedTime) {
curModifiedTime= lastModifiedTime;
flag = true;
}
return flag;
}

读取文件最后改动地址。若大于初始时间。则将最后改动时间赋给初始时间

public boolean reSetTaskSchedulerzIntervalTime(){
boolean flag = false;
//监听到配置文件改动
if(PropertiesUtil.isModifiedValue()) {
long time = 0L;
try {
time = Integer.parseInt(PropertiesUtil.readValue(TaskSchedulerzIntervalTime));
simpleTrigger.setRepeatInterval(time);
Scheduler scheduler = quartzScheduler.getScheduler();
String jobName = simpleTrigger.getName();
String group = simpleTrigger.getGroup();
try {
scheduler.pauseJob(jobName, group);
scheduler.unscheduleJob(jobName,group);
scheduler.scheduleJob(simpleTrigger);
scheduler.resumeJob(jobName, group);
flag = true;
} catch (SchedulerException e1) {
e1.printStackTrace();
}
} catch (NumberFormatException e) {
System.out.println("定时任务非数字! ");
e.printStackTrace();
}
}
return flag;
}

当中,quartzScheduler和simpleTrigger是注入进去的,在Spring中整合Quartz时已经定义好,配置文件例如以下

<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="jobDetail" />
</property>
<property name="startDelay">
<value>0</value>
</property>
<property name="repeatInterval" value="${taskSchedulerzIntervalTime}" />
</bean> <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="taskScheduler" />
<property name="targetMethod" value="run" />
</bean>

之前的调度时间是在里面写死的。如今是通过配置文件来读取。例如以下


<context:property-placeholder location="classpath:config.properties,classpath:jdbc.properties" />

測试例如以下


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFja2Uy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


最新文章

  1. SharePoint2016如何使用策略进行文档归档
  2. MySQL 数据库事务与复制
  3. EasyPR--开发详解(3)高斯模糊、灰度化和Sobel算子
  4. iOS UITextField限制输入数字
  5. 【学习笔记】Wireshark的用法
  6. 【bzoj1864】[ZJOI2006]三色二叉树
  7. 周赛-Clique in the Divisibility Graph 分类: 比赛 2015-08-02 09:02 23人阅读 评论(3) 收藏
  8. 给jdk写注释系列之jdk1.6容器(9)-Strategy设计模式之Comparable&amp;Comparator接口
  9. Asp.net Gridview导出Excel
  10. Centos7网络配置+图形界面设置
  11. centos下pg_dump的服务器版本不匹配问题
  12. 中介者模式 C++ 实现
  13. LeetCode题解38.Count and Say
  14. win10免安装版本的MySQL的下载安装和配置
  15. Tomcat架构解析(五)-----Tomcat的类加载机制
  16. java类封装成dll
  17. ip addr 相关操作
  18. SpringBoot 使用小技巧合集
  19. WPF基础学习第一天
  20. 旅游吧!我在这里 ——旅游相册POI搜索:找回你的足迹

热门文章

  1. 19. Spring Boot Shiro 权限管理
  2. FAILOVER详细步骤
  3. VUE笔记 - 插值表达式 v-on: / @ 事件绑定 定时器运用
  4. Docker安装RabbitMQ,RabbitMQ Management使用
  5. 【CS Round #46 (Div. 1.5) B】Letters Deque
  6. Redis源代码分析(八)--- t_hash哈希转换
  7. 软件——机器学习与Python,if __name__ == &#39;__main__&#39;:函数
  8. JavaScript字符串替换replace方法
  9. matlab 音频处理
  10. 【例题 6-2 UVA - 514】Rails