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="">


实际工程Quartz与Spring设计与实现一体化的热部署的更多相关文章

  1. spring boot (三): 热部署

    介绍了Spring boot实现热部署的两种方式,这两种方法分别是使用 Spring Loaded和使用spring-boot-devtools进行热部署. 热部署是什么 大家都知道在项目开发过程中, ...

  2. spring boot 启动报错(spring-boot-devtools热部署后):The elements [spring.resources.cache-period] were left unbound. Update your application's configuration

    详细错误代码: *************************** APPLICATION FAILED TO START *************************** Descript ...

  3. Spring Boot 要点--启动类和热部署

    spring boot需要一个启动类 比如 package com.tianmaying; import org.springframework.boot.SpringApplication; imp ...

  4. Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools)

    热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各 ...

  5. spring boot+ Intellj idea devtools 设置热部署

    POM文件 <!--添加依赖--> <dependency> <groupId>org.springframework.boot</groupId> & ...

  6. 使用eclipse,对spring boot 进行springloader或者devtool热部署失败处理方法

    确定配置进行依赖和配置没有错误后. 调整spring boot 的版本,因为新版本对老版本的spring boot 不能使用. 改为: <groupId>org.springframewo ...

  7. 使用Spring Loader或者Jrebel实现java 热部署

    .其实JRebel和Spring-Loaded就是一个开发环境下的利器,skip build and redeploy process,大大提升了工作效率!而非生产环境的利器...因为线上reload ...

  8. Spring Boot学习笔记(三)实现热部署

    pom文件中添加如下依赖即可 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  9. spring boot 在idea中实现热部署

    1)在pom中直接引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

随机推荐

  1. 深拷贝&浅拷贝

    1.区别 浅拷贝:只拷贝了基本数据类型,引用数据类型只复制了引用,没有复制实体. 深拷贝:拷贝所有的层级属性 2.浅拷贝 (1) 直接赋值 拷贝之后,所有层级属性仍然公用了地址,会被影响 var a ...

  2. 【河南省多校脸萌第六场 B】点兵点将

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 先每个单位都不建造bi; 打死一个ai之后,把bi加入到大根堆里面. 然后等到不够打死某个单位的时候; 从大根堆里面取出最大的那个bi;不断取, ...

  3. 洛谷——P1035 级数求和

    https://www.luogu.org/problem/show?pid=1035 题目描述 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. ...

  4. 洛谷 P1657 选书

    P1657 选书 题目描述 学校放寒假时,信息学奥赛辅导老师有1,2,3……x本书,要分给参加培训的x个人,每人只能选一本书,但是每人有两本喜欢的书.老师事先让每个人将自己喜欢的书填写在一张表上.然后 ...

  5. [Angular] HttpParams

    It is possible to use HttpParams to set http params. For example we have this url to make: https://a ...

  6. Codeforces #144 (Div. 1) B. Table (组合数学+dp)

    题目链接: B.Table 题意: \(n*m\)的矩阵使每个\(n*n\)矩阵里面准确包含\(k\)个点,问你有多少种放法. \((1 ≤ n ≤ 100; n ≤ m ≤ 10^{18}; 0 ≤ ...

  7. C#基础数据类型与字节数组(内存中的数据格式)相互转换(BitConverter 类)

      在某种通讯协议中(如 Modbus),可能需要把一些基本的数据类型内存中的表示形式转换成以字节数组的形式,方便传送.C/C++中可以利用指针等操作完成,但C#中没有指针,咋办呢?可以用BitCon ...

  8. jmeter--九种定时器介绍(包括思考时间、集合点)

    知识来源:http://www.cnblogs.com/imyalost/p/6004678.html jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其中,定时器(timer)是很 ...

  9. 怎样自己构建一个小型的Zoomeye----从技术细节探讨到实现

     转载请注明出处:viewmode=list">http://blog.csdn.net/u011721501?viewmode=list 0.概述 Zoomeye是个网络空间的搜 ...

  10. js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)

    js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...