一、定时任务需求简介
java项目实现可以定时自动运行项目中的某段程序。可用于定时自动检查系统中某项任务是否即将超期,或其他需要定时自动执行的功能。
二、依赖jar包
quartz-all-1.6.0.jar
commons-collections-3.2.1.jar
quartz-1.8.6.jar
以上jar包均可直接到maven公共仓库添加依赖免费下载。
三、具体实现
1.需要定时自动执行的程序(建议单独写成一个普通类)
package com.pfms.app.pmbgszh.dcdb;
import java.util.Date;
import javax.annotation.Resource;
/**
* 定时执行的类
* @author Zhangwei
*
*/
public class TimingCheck {
/**
* 定时执行方法
* @throws IOException
*/
public void timingExecute() throws IOException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");
System.out.println(sdf.format(new Date())+" :定时检查任务执行成功");
}
}
2.定时器xml文件配置
需要定时执行的程序(类)写好后,需要在Xml文件中配置定时器并引入。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--需要定时执行的类 -->
<bean id="timingCheck" class="com.pfms.app.pmbgszh.dcdb.TimingCheck"/>
<!--jar类-->
<bean id="mainJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="timingCheck"/><!--将需要定时执行的类添加到定时器当中 -->
</property>
<property name="targetMethod">
<value>timingExecute</value> <!--需要定时执行类的那个方法-->
</property>
</bean>
<bean id="timeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="mainJob"/>
</property>
<property name="cronExpression">
<value>0 * 11 * * ?</value> <!--定时执行的时间(此处表示11:00-11:59每分钟执行一次)-->
</property>
</bean>
<!--启动定时器-->
<bean id="sfb" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="timeTrigger"/>
</list>
</property>
</bean>
<!--定时器quartz的定时执行时间语法 定时单位-->
<!--
"0 0 10,14,16 * * ?" 每天上午10点,下午2点,4点
"0 0/30 9-17 * * ?" 朝九晚五工作时间内每半小时
"0 0 12 ? * WED" 表示每个星期三中午12点
"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期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午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" 每月的第三个星期五上午10:15触发
-->
</beans>
3.web.xml添加监听
在web.xml中把这个TimeConfig.xml添加进去作为监听,系统启动后自动就监听这个事件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
/WEB-INF/TimerConfig.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>login.ftl</welcome-file>
</welcome-file-list>
</web-app>
四、参考资料
https://blog.csdn.net/m0_37505412/article/details/75263879(简单定时任务)
https://blog.csdn.net/aspnet2002web/article/details/52810569
https://blog.csdn.net/u010648555/article/details/52162840(精进)