(直接使用quartz时,每一个自定义的定时任务job类都要实现job接口)
spring-mvc-quartz2.xml:
<bean id="job2Trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.yueguang.schedule.Job2"/>
<property name="jobDataAsMap"> <!-- 只能这么注入属性,不能在任务类里注入 -->
<map><entry key="job2Service" value-ref="job2Service"/></map>
</property>
</bean>
</property>
<!-- 指定Cron表达式 -->
<property name="cronExpression" value="0/1 * * * * ?"/>
</bean>
<bean id="schedulerFactory" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="job2Trigger" />
</list>
</property>
</bean>
<bean id="job2Service" class="....">
</bean>
package com.yueguang.schedule;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job2 extends QuartzJobBean {
private Job2Service job2Service;
@Override
protected void executeInternal(JobExecutionContext jobexecutioncontext)
throws JobExecutionException {
job2Service.test();
}
public void setJob2Service(Job2Service job2Service) {
this.job2Service = job2Service;
}
}
二,利用spring MethodInvokingJobDetailFactoryBean类,不需要继承.
spring-mvc-quartz1.xml
<!-- job bean 配置 -->
<bean id="job1"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="job1" />
<property name="targetMethod" value="execute" />
<property name="concurrent" value="true" /> <!-- 设置为true则多个job并发执行 -->
</bean>
<!-- trigger -->
<bean id="job1Trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job1" />
<property name="cronExpression" value="0/1 * * * * ?" />
</bean>
<!-- 定时任务调度器 -->
<bean id="schedulerFactory" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="job1Trigger" />
<!-- <ref bean="job2Trigger" /> -->
</list>
</property>
</bean>
public class Job1 {
private Job1Service job1Service;
public void execute() {
system.out.println("---test----");
}
}
注:
1、在第一种方式中,不能在jobbean中直接以注解的方式注入spring bean组件,必须在jobDetail的属性jobDataAsMap中配置要注入的bean组件,同时需要在该jobbean中写好对应的setter.
2、在实际开发中,第二种方式很方便,特别是在使用注解的情况下。