中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring執行定時任務

發布時間:2020-08-13 04:19:54 來源:ITPUB博客 閱讀:154 作者:okone96 欄目:編程語言

定義一個任務是很簡單的實現TimerTask的run方法就可以了.

如下:SayHelloTask.java

package test.timerTask;
import java.util.TimerTask;
public class SayHelloTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("測試TimerTask : Hello !!");
}
}

然后是配置文件:

xml version="1.0" encoding="UTF-8"?>

DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >
<
beans>
<
bean id="sayHelloTask" class="test.timerTask.SayHelloTask">bean>
<
bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<
property name="timerTask">
<
ref bean="sayHelloTask"/>
property>

<!-- 任務執行周期 2m 關于一些任務的參數請參考JDK doc文檔和Spring相關文檔-->

<property name="period">
<
value>2000value>
property>

<!-- 延時1m 執行任務 -->

<property name="delay">
<
value>1000value>
property>
bean>

<!-- 啟動定時器 -->

<bean id="timerBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<
property name="scheduledTimerTasks">
<
list>
<
ref bean="scheduledTask"/>
list>
property>
bean>
beans>
測試類如下:TestApp.java

package test.timerTask;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestApp {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context = new ClassPathXmlApplicationContext("test/timerTask/javaTimer.xml");
// ApplicationContext context2 = new ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml");
}
// 只要加載配置文件就可以了,
}

使用Java中的定時器比較簡單,其提供的任務也比較簡單, 下面來看看使用quartz來執行一個復雜的任務.

首先制定一個任務, 實現QuartzJobBean中的方法.

package test.timerTask;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SayHelloTaskUsingQuartz extends QuartzJobBean {

@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("使用Quartz 認為調度: Hello!!");
}

}

配置代碼如下:quartzTimer.xml

xml version="1.0" encoding="UTF-8"?>
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >
<
beans>
<
bean id="sayHelloJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<
property name="jobClass">
<
value>test.timerTask.SayHelloTaskUsingQuartzvalue>
property>
bean>

<!-- 關鍵在如下兩個觸發器的配置 -->
<!-- 類似于Java的簡單觸發器 -->

<bean id="helloTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<
property name="jobDetail">
<
ref bean="sayHelloJob"/>
property>
<
property name="startDelay">
<
value>1000value>
property>
<
property name="repeatInterval">
<
value>3000value>
property>
bean>

<!-- 復雜觸發器 -->

<bean id="helloCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<
property name="jobDetail">
<
ref bean="sayHelloJob"/>
property>
<
property name="cronExpression">
<!-- 關鍵在配置此表達式 -->
<
value>0 49 15 * * ?value>
property>
bean>
<
bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<
property name="triggers">
<
ref bean="helloCronTrigger"/>
property>
bean>
beans>

關于簡單觸發器和復雜觸發器,查考下面的解釋:

Quartz設計者做了一個設計選擇來從調度分離開作業。Quartz中的觸發器用來告訴調度程序作業什么時候觸發。框架提供了一把觸發器類型,但 兩個最常用的是SimpleTrigger和CronTrigger。SimpleTrigger為需要簡單打火調度而設計。典型地,如果你需要在給定的 時間和重復次數或者兩次打火之間等待的秒數打火一個作業,那么SimpleTrigger適合你。另一方面,如果你有許多復雜的作業調度,那么或許需要 CronTrigger。

CronTrigger是基于Calendar-like調度的。當你需要在除星期六和星期天外的每天上午10點半執行作業時,那么應該使用CronTrigger。正如它的名字所暗示的那樣,CronTrigger是基于Unix克隆表達式的。

作為一個例子,下面的Quartz克隆表達式將在星期一到星期五的每天上午10點15分執行一個作業。
0 15 10 ? * MON-FRI

下面的表達式
0 15 10 ? * 6L 2002-2005
將在2002年到2005年的每個月的最后一個星期五上午10點15分執行作業。

你不可能用SimpleTrigger來做這些事情。你可以用兩者之中的任何一個,但哪個跟合適則取決于你的調度需要。

更多詳細介紹參考此處:

關于cronExpression的介紹:

字段 允許值 允許的特殊字符
0-59 , - * /
0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可選) 留空, 1970-2099 , - * /

如上面的表達式所示:

詳細說明如下:

The '*' character is used to specify all values. For example, "*" in the minute field means "every minute".

“*”字符被用來指定所有的值。如:”*“在分鐘的字段域里表示“每分鐘”。

The '?' character is allowed for the mother day-of-month and mother day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.

“?”字符只在日期域和星期域中使用。它被用來指定“非明確的值”。當你需要通過在這兩個域中的一個來指定一些東西的時候,它是有用的。看下面的例子你就會明白。

The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12".

“-”字符被用來指定一個范圍。如:“10-12”在小時域意味著“10點、11點、12點”。

The ',' character is used to specify additional values. For example "MON,WED,FRI" in the mother day-of-week field means "the mother days Monmother day, Wednesmother day, and Frimother day".

“,”字符被用來指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.

[@more@]
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

濉溪县| 特克斯县| 平泉县| 大田县| 双牌县| 耿马| 垫江县| 保康县| 诸暨市| 桦甸市| 平和县| 云安县| 盘锦市| 大港区| 勃利县| 富民县| 瑞丽市| 额济纳旗| 当雄县| 延安市| 隆林| 中超| 嵩明县| 微博| 张掖市| 乃东县| 钟祥市| 伊金霍洛旗| 新绛县| 道孚县| 江山市| 巴彦淖尔市| 花莲市| 得荣县| 大宁县| 嵩明县| 蛟河市| 梧州市| 宁河县| 鹰潭市| 琼海市|