项目实战之Quartz与Spring整合进行热部署的设计与实现
2014-04-25 00:10
543 查看
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" />
测试如下
相关文章推荐
- Quartz与Spring整合进行热部署的实现(二)
- 继上篇博文:Quartz与Spring整合进行热部署的实现,发现了Spring官方的解决,记录下并改进.
- Quartz与Spring整合进行热部署的实现(一)
- Quartz与Spring整合进行热部署的实现
- SpringBoot+Maven项目实战(6):整合Log4j和Aop,实现简单的日志记录
- Spring整合Quartz实现定时任务的时间更新,暂停和启用(不需要重启项目并且配置多数据源)
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
- 实际工程Quartz与Spring设计与实现一体化的热部署
- spring3.2.0 quartz-2.2.1 整合 实现动态定时任务
- Spring 整合Quartz 2实现定时任务四:细化调整及一些已知的问题
- (一)spring3.2.0 quartz-2.2.1 整合 实现动态定时任务 解决service为null问题
- Spring与Quartz的整合实现定时任务调度
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- spring-loaded 实现web项目热部署
- Spring 3整合Quartz 2实现定时任务二:动态添加任务
- Spring与Quartz的整合实现定时任务调度
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- 详解Spring整合Quartz实现动态定时任务