(1)applicationContext.xml配置信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="jobExample02" class="example.JobExample02"></bean>
<!-- 配置quartz,有两种方式 -->
<!-- 方式一:使用jobDetailFactoryBean,任务类必须实现job接口 -->
<!-- <bean id="jobDetailFactoryBean" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> -->
<!-- 指定job接口实现类,value值为全类名 -->
<!-- <property name="jobClass" value="example.JobExample01"></property>
<property name="jobDataAsMap"> <map> <entry key="triggerMessage" value="example.JobExample
Message"> </entry> </map> </property> </bean> -->
<!-- 方式二:使用MethodInvokingJobDetailFactoryBean,任务类可以不用实现job接口,通过targetClass属性值指定的类的targetMethod属性值指定执行方法的名称 -->
<bean id="methodInvokingJobDetailFactoryBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 配置调度目标类 -->
<property name="targetObject" ref="jobExample02"></property>
<!-- 配置执行方法名称 -->
<property name="targetMethod" value="execute"></property>
<property name="concurrent" value="false"></property>
</bean>
<!-- 配置简单调度触发器 -->
<!-- <bean id="simpleTriggerFactoryBean" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="jobDetailFactoryBean"></property> -->
<!-- 设置延迟1秒执行 -->
<!-- <property name="startDelay" value="1000"></property> --> <!-- 设置每10秒触发一次 -->
<!-- <property name="repeatInterval" value="10000"></property> -->
<!-- <property name="jobDataAsMap"> <map> <entry key="triggerMessage" value="example.JobExample
Message。。。。。。"> </entry> </map> </property> -->
<!-- </bean> -->
<bean id="cronTriggerFactoryBean"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="methodInvokingJobDetailFactoryBean"></property>
<property name="cronExpression" value="5/10 * * * * ?"></property>
<property name="jobDataAsMap">
<map>
<entry key="triggerMessage" value="example.JobExample
Message。。。。。。">
</entry>
</map>
</property>
</bean>
<!-- 配置调度工厂 -->
<!-- <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers"> <list> <ref bean="simpleTriggerFactoryBean" />
</list> </property> </bean> -->
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerFactoryBean" />
</list>
</property>
</bean>
</beans>
(2)方式一:实现Job接口,重写public void execute(JobExecutionContext paramJobExecutionContext)
throws JobExecutionException方法
package example;
import java.util.Map;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class JobExample01 implements Job {
public JobExample01() {
super();
System.err.println("------------------------------------------");
System.out.println("JobExample......");
}
@Override
public void execute(JobExecutionContext paramJobExecutionContext)
throws JobExecutionException {
System.out.println("上次触发时间:"
+ paramJobExecutionContext.getPreviousFireTime());
System.out.println("当前触发时间:" + paramJobExecutionContext.getFireTime());
System.out.println("下次触发时间:"
+ paramJobExecutionContext.getNextFireTime());
Map<?, ?> map = paramJobExecutionContext.getMergedJobDataMap();
System.out.println(map.get("triggerMessage"));
}
}
(3)方式二:在applicationContext.xml文件配置使用MethodInvokingJobDetailFactoryBean,任务类可以不用实现job接口,通过targetClass属性值指定的类的targetMethod属性值指定执行方法的名称。
package example;
public class JobExample02 {
public JobExample02() {
super();
System.err.println("------------------------------------------");
System.out.println("JobExample......");
}
public void execute() {
System.out.println(this);
System.out.println("example.JobExample Message。。。。。。");
}
}
测试类:
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
}
}
(1)方式一:
(2)方式二:
从运行结果:可以看出方式一每次调度简单示例都会创建一个新的对象,而方式二则是单例的,对象只创建一次。