Spring无缝的集成了Quartz(阔吃),使得企业可以更好的使用Quartz进行任务的调度。
Spring整合Quartz进行配置遵循下面的步骤:
1:定义工作任务的Job
2:定义触发器Trigger,并将触发器与工作任务绑定
3:定义调度器,并将Trigger注册到Scheduler
applicationContext-quartz.xml代码如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.quartz.xmlQuartz"/>
<!-- 定义的工作Job -->
<bean id="helloXmlQuartz" class="com.quartz.xmlQuartz.HelloXmlQuartz"/>
<!-- JobDetail -->
<bean id="myHelloXmlQuartzJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="helloXmlQuartz"/>
<property name="targetMethod" value="runQuartz"/>
<!-- 设置任务是否可并发执行,默认为不并发 -->
<property name="concurrent" value="false"/>
</bean>
<!-- trigger -->
<bean id="myHelloXmlQuartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myHelloXmlQuartzJobDetail"/>
<property name="cronExpression" value="* * * * 1 ?"/>
</bean>
<!-- Scheduler(容器) -->
<bean id="scheduleFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myHelloXmlQuartzTrigger"/>
</list>
</property>
</bean>
</beans>
HelloXmlQuartz.java代码如下:
package com.quartz.xmlQuartz;
import org.springframework.stereotype.Component;
/**
* Created by tang on 2018/4/26.
*/
@Component
public class HelloXmlQuartz {
public HelloXmlQuartz() {
System.out.println("我是quartz,我被初始化了");
}
public void runQuartz(){
System.out.println("我是quartz,我每十秒执行一次");
}
}
二、任务调度器(spring自带的)
applicationContext-task.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"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 目的:使得Spring quartz定时任务的相应注解生效 -->
<task:annotation-driven/>
<context:component-scan base-package="com.quartz.annotationQuartz"/>
</beans>
HelloAnnotationJob.java代码如下:
package com.quartz.annotationQuartz;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by tang on 2018/4/26.
*/
@Component
public class HelloAnnotationJob {
public HelloAnnotationJob() {
System.out.println("我是注解定时器,我被初始化了");
}
/**
* 每分钟执行一次此方法
*/
@Scheduled(cron = "0/10 * * * * ?")
public void runJob(){
System.out.println("hello MyJob"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
}
}