spring+quartz动态定时器

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值