spring+quartz动态定时器

来源:互联网 发布:白夜追凶小说结局知乎 编辑:程序博客网 时间:2024/04/23 19:05

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>



0 0
原创粉丝点击