一、创建定时任务
package com.jy.user.job;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.jy.user.service.IUserService;
@Component
public class UserCountJob {
@Autowired
private IUserService userService;
public void countUser(){
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date date=new Date();
//System.out.print(dateFormater.format(date));
System.out.println("**************执行定时任务:统计用户人数,执行时间是"+dateFormater.format(date));
int count=userService.doCountUser();
System.out.println("************* 执行完毕 ,用户人数是"+count);
}
}
二、配置spring-quartz.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans default-lazy-init="true">
<!-- 定义调用对象和调用对象的方法 -->
<bean id="timerTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类的对象-->
<property name="targetObject">
<ref bean="userCountJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>countUser</value>
</property>
<!--将并发设置为false-->
<property name="concurrent" value="false" />
</bean>
<!-- 定义触发时间 ,此处于教程上不一致,教程是spring 3.x时使用的,现在都是spring 4.x-->
<!-- 教程是用的是 org.springframework.scheduling.quartz.CronTriggerBean -->
<!-- spring 4.x以后使用的是 org.springframework.scheduling.quartz.CronTriggerFactoryBean -->
<bean id="doTimerTask" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="timerTask"/>
</property>
<!-- cron表达式
常用示例:
0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 2005 2005年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发
0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发
0 15 10 15 * ? 每月15号上午10点15分触发
0 15 10 L * ? 每月最后一天的10点15分触发
0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)
0/30 * * * * ? 每 30s执行一次
-->
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init='false' class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!--作业调度器,list下可加入其他的调度器-->
<ref bean="doTimerTask"/>
</list>
</property>
</bean>
</beans>
控制台输出结果:
**************执行定时任务:统计用户人数,执行时间是2017-07-04 14-44-40
**************调用业务层统计用户人数*********
************* 执行完毕 ,用户人数是336
**************执行定时任务:统计用户人数,执行时间是2017-07-04 14-44-50
**************调用业务层统计用户人数*********
************* 执行完毕 ,用户人数是958
**************执行定时任务:统计用户人数,执行时间是2017-07-04 14-45-00
**************调用业务层统计用户人数*********
************* 执行完毕 ,用户人数是917