一、通过配置实现
1、编写Java类文件,如下两个Java类文件。
import java.util.Date;
public class QuartzJob {
public void work() {
System.out.println("QuartzJob is time to run :" + new Date().toString());
}
}
import java.util.Date;
public class QuartzTest {
//到了某个时刻就会被调用
public void autoRun() {
System.out.println("It's time to run :" + new Date().toString());
}
}
2、添加配置文件,
<?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:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- 定时任务bean -->
<bean name="quartzTest" class="com.zxgs.task.QuartzTest" />
<bean name="quartzJob" class="com.zxgs.task.QuartzJob" />
<!-- 定时任务 -->
<bean id="quartzTestTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzTest"></property>
<property name="targetMethod" value="autoRun"></property>
<property name="concurrent" value="true"></property>
</bean>
<bean id="quartzJobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzJob"></property>
<property name="targetMethod" value="work"></property>
<property name="concurrent" value="true"></property>
</bean>
<!-- 定时任务触发器 -->
<bean id="quartzTestTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="quartzTestTask"/>
<!-- 每五秒 -->
<property name="cronExpression" value="0/5 * * * * ?"></property>
</bean>
<bean id="quartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="quartzJobTask"/>
<!-- 每二秒 -->
<property name="cronExpression" value="0/2 * * * * ?"></property>
</bean>
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="quartzTestTrigger" />
<ref local="quartzJobTrigger" />
</list>
</property>
</bean>
</beans>
二、通过注解实现
使用@Scheduled注解进行开发
1、在xml中添加空间名
xmlns:task="http://www.springframework.org/schema/task"
xsi中引入
http://www.springframework.org/schema/task/spring-task-3.0.xsd
2、扫描包
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.zxgs.task" />
<!--启用注解驱动,spring才能识别@Scheduled注解 -->
<task:annotation-driven scheduler="taskScheduler" mode="proxy" />
<!--配置定时任务线程池线程数量, 官方推荐pool-size:5-10 -->
<task:scheduler id="taskScheduler" pool-size="10" />
3、 在类上加注解
@Scheduled(cron="0/2 * * * * ?")
public void work() {
System.out.println("QuartzJob is time to run :" + new Date().toString());
}