Quartz - Spring和Quartz的集成

一、创建任务实体 实现任务的具体逻辑


    1、继承式的实现
    package com.xl.task;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    public class SimpleExtsJob extends QuartzJobBean {
        
        private String alias;  //由JobDetailBean的jobDataAsMap注入
        
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
            
            System.out.println("Job start...");
    
        }
    
        public void setAlias(String alias) {
            this.alias = alias;
        }
    
    }
    2、非继承的实现
    package com.xl.task;
    
    import org.springframework.stereotype.Component;


    @Component
    public class SimpleCommJob {

        public void doJob() throws Exception {

            System.out.println("Job start...");

        }
    }

二、配置作业细节 注入要被调度的任务


    1、继承式的调度配置

    <bean name="simpleExtsJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.xl.task.SimpleExtsJob" />  <!-- 配置Job的类名 -->
        <property name="jobDataAsMap">  <!-- 为有属性需要注入的Job配置值(quartz1.6和spring3.0可以自动为为继承式Job属性注入)  -->
            <map>
                <entry key="alias" value="simple" />
            </map>
        </property>  
    </bean>
    2、非继承的调度配置
    <bean id="SimpleCommJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="simpleCommJob"/>  <!-- 注入Bean的Id -->
        <property name="targetMethod" value="doJob"/>  <!-- 任务被调度后执行的方法 -->
        <property name="concurrent" value="false"/>  <!-- 是否允许并发(在任务执行时间大于调度间隔时间时) -->
    </bean>

三、配置任务触发器 继承和非继承的配置相同,定义任务触发的时间与频率,常用触发器有SimpleTrigger和CronTrigger两种


    1、SimpleTriggerBean触发器,每隔多长时间执行一次的触发器(上一次开始到下一次开始开始之间的间隔)

    <bean id="simpleCommSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="simpleCommJobDetail" />
        <property name="startDelay" value="60000" />
        <property name="repeatInterval" value="60000" />
    </bean>
    2、CronTriggerBean触发器,每到什么时间执行一次的触发器(如每天几点几分开始执行)
    <bean id="simpleCommCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="simpleCommJobDetail"/>
        <property name="cronExpression" >
            <value>0 0 9 * * ?</value>
        </property>
    </bean>

四、配置任务计划的调度工厂

    <bean id="configScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="simpleCommSimpleTrigger"/>  <!-- 配置任务触发器  -->
                <!-- <ref local="simpleCommCronTrigger"/> -->
            </list>
        </property>
    </bean>

五、补充

    1、如果出现定时调度的任务运行一段时间后突然不执行了,可以尝试增大线程池的最大线程数org.quartz.threadPool.threadCount,该参数默认值为10



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值