1、写一个timer类MyTimer,类中注入Scheduler变量和setScheduler方法。
2,写一个方法doTimer,定时任务需要执行的代码写在里面。
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("doTime", Scheduler.DEFAULT_GROUP);
String originConExpression = trigger.getCronExpression();
if(!originConExpression.equalsIgnoreCase(dbCronExpression)){
trigger.setCronExpression(dbCronExpression);
scheduler.rescheduleJob("doTime"+timer, Scheduler.DEFAULT_GROUP,trigger);
}
"doTime" 是spring配置的CronTriggerBean,获取配置中的定时时间,当和数据库中的动态设定的时间不同时,重新加载scheduler。
3、spring配置(需设置lazy-init='false')(支持多个动态定时任务):
<bean id="myTimer" class="MyTimer">
<property name="scheduler" ref="startQuertz"></property>
</bean>
<bean id="jobTask1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myTimer"/>
<property name="targetMethod" value="doTimer1"/>
<property name="concurrent" value="false"/>
</bean>
<bean id="jobTask2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myTimer"/>
<property name="targetMethod" value="doTimer2"/>
<property name="concurrent" value="false"/>
</bean>
<bean id="jobTask3" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myTimer"/>
<property name="targetMethod" value="doTimer3"/>
<property name="concurrent" value="false"/>
</bean>
<bean id="doTime1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobTask1"/>
<property name="cronExpression" value="0 16 15 ? * MON"/>
</bean>
<bean id="doTime2" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobTask2"/>
<property name="cronExpression" value="0 30 12 ? * WED"/>
</bean>
<bean id="doTime3" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobTask3"/>
<property name="cronExpression" value="0 30 11 ? * SAT"/>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime1"/>
<ref bean="doTime2"/>
<ref bean="doTime3"/>
</list>
</property>
<property name="autoStartup" value="true" />
</bean>