java spring quartz如何配置让job只运行一次?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java spring quartz如何配置让job只运行一次?相关的知识,希望对你有一定的参考价值。
<bean id="systemDataUpgradeTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="systemDataUpgradeJob" />
<!-- 5 seconds -->
<property name="startDelay" value="1000" />
<!-- repeat every 3 hours -->
<property name="repeatInterval" value="10800000" />
</bean>
我们项目是这样写的,楼主说,只运行一次,是经过某个时间定运行一次吗?还是其他什么意思?
<!-- 触发器 --><bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail"><ref bean="methodInvokingJobDetail"/></property>
<property name="cronExpression">
<value>4 * * * * ?</value>
<!-- <value>5 * * * * ?</value>-->
<!--
1.秒 0-59
2.分钟 0-59
3.小时 0-23
4.月份中的日期 1-31
5.月份 1-12或者Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec
6.星期中的日期 1-7或者MON,TUE,WED,THU,FRI,SAT,SUN.
-->
</property>
</bean>
<!-- 定时任务列表 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list><ref local="cronTrigger"/>
</list>
</property>
</bean> 参考技术A 只运行一次就不需要写job了,job最好还是用 cronExpression 吧,这样控制起来比较精确 ! 参考技术B <bean id="systemDataUpgradeTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="systemDataUpgradeJob" />
<property name="cronExpression">
<!-- 每年的5月3日16点执行一次-->
<value>0 0 16 3 5 ?</value>
</property>
</bean>
可以这样去配置,用cron表达式
参考技术C 你具体是什么意思,想要多长时间执行一次?Java Spring-Spring与Quartz整合
关于spring mvc、mybatis、maven的整合,请看上一篇文章
Quartz是一个强大的可以在web端执行定时任务的jar包。
本篇文章分为两大不同配置,第一位xml配置,第二位注解配置
-----下面是xml配置篇-----
1. 配置
在spring-mvc.xml文件中
下面有两种配置方式,第一种是SimpleTigger(注释),第二种是CronTiggerBean
<!-- 定時任務開始 --> <bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.cjt.quartz.Job1" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="5" /> </map> </property> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job1" /> <property name="cronExpression" value="0 0/1 * * * ?" /> <!-- 每分钟运行一次 --> </bean> <!-- <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job1"/> <property name="startDelay" value="1000"/> <property name="repeatInterval" value="5000"/> </bean> --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean> <!-- 定時任務結束 -->
在maven中pom.xml加入quartz的jar包(注意spring不支持quartz 2.0以上的版本)
<properties> <quartz.version>1.8.5</quartz.version> </properties> <dependencies> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency> </dependencies>
2. 编程
Job1.java
public class Job1 extends QuartzJobBean { private int timeout; private static int i = 0; //调度工厂实例化后,经过timeout时间开始执行调度 public void setTimeout(int timeout) { this.timeout = timeout; } /** * 要调度的具体任务 */ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("定时任务执行中…"); } }
-----下面是注解配置篇-----
1. 在spring-mvc.xml中加入:
<task:annotation-driven/> <context:annotation-config/> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> <context:component-scan base-package="com.cjt.quartz"/>
xmlns中加入
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation中加入
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
2. 代码
package com.cjt.quartz; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class Job2 { @Scheduled(cron="0/5 * * * * ? ") public void excute() { System.out.println("執行任務 Job2 excute..."); } }
3. 加入maven包
请参照上面的xml配置篇
下载项目:
https://github.com/cjt321/MavenSpirngmvcMybatis
以上是关于java spring quartz如何配置让job只运行一次?的主要内容,如果未能解决你的问题,请参考以下文章