您的位置:首页 > 编程语言 > Java开发

Quartz - Spring和Quartz的集成

2018-03-06 10:54 274 查看
一、创建任务实体 实现任务的具体逻辑

    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: