首先需要在 xml 中配置
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="TestTrigger" /> <!-- 定义多个定时器 -->
<ref local="WestTrigger" />
</list>
</property>
</bean>
<!-- 第二个定时器 -->
<bean id="WestTrigger2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.Test"></bean>
</property>
<property name="concurrent" value="true"/>
<property name="targetMethod" value="springEst" /> <!-- 需要执行的方法 -->
</bean>
<!-- 配置触发器0 -->
<bean id="WestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="WestTrigger2"/> <!-- 触发器触发的 执行定时任务的bean -->
</property>
<property name="cronExpression">
<!-- 每隔5秒执行一次 -->
<value>0/5 * * * * ?</value>
</property>
</bean>
<!-- 第一个定时器 -->
<bean id="TestTrigger1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.Test"></bean>
</property>
<property name="concurrent" value="true"/>
<property name="targetMethod" value="springTest" /> <!-- 需要执行的方法 -->
</bean>
<!-- 配置触发器0 -->
<bean id="TestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="TestTrigger1"/> <!-- 触发器触发的 执行定时任务的bean -->
</property>
<property name="cronExpression">
<!-- 每隔6秒执行一次 -->
<value>0/6 * * * * ?</value>
</property>
</bean>
--------------------------------------------------------------------------------------------------------------------------------------
也可以写成这样
<!-- 定义我们要运行的类,可以使用注入定制一些参数 -->
<bean id=" TestTime" class="com.Test">
<property name="para" value="Spring定时器测试V1" />
</bean>
<!-- 引用,配置要运行的方法 -->
<bean id="WestTrigger2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="TestTime" />
</property>
<property name="concurrent" value="true"/> <!-- 是否并发执行 一次没完下一个不开始 -->
<property name="targetMethod" value="springEst" /> <!-- 需要执行的方法 -->
</bean>
<!-- 引用,定制调用间隔,具体时间配置的正则,请阅读 -->
<bean id="WestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="WestTrigger2" />
</property>
<property name="cronExpression">
<value>0/6 * * * * ?</value>
</property>
</bean>
<bean id="TestTrigger1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="TestTime" />
</property>
<property name="concurrent" value="true"/> <!-- 是否并发执行 一次没完下一个不开始 -->
<property name="targetMethod" value="springTest" /><!-- 需要执行的方法 -->
</bean>
<bean id="TestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="TestTrigger1" />
</property>
<property name="cronExpression">
<value>0/5 * * * * ?</value>
</property>
</bean>
----------------------------------------------------------------------------------------------------------------------------------
java 类
/**
* spring 定时器测试
* @param request
* @param response
*/
public void springTest() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.err.println(format.format(new Date())+"============================");
}
public void springEst() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.err.println(format.format(new Date())+"-----------------------------");
}
----------------------------------------------------------------------------------------------------------------------------------
定时器时间设置
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / LW C
月份 1-12 或者 JAN-DEC ,- * /
星期 1-7 或者 SUN-SAT ,- * ? / L C #
年(可选)留空, 1970-2099 ,- * /
表达式意义
"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 ? 3WED" 每年三月的星期三的下午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 ? * 6L2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? *6#3" 每月的第三个星期五上午10:15触发