Quart框架
一、介紹Quartz
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源專案,它完全由 Java 寫成,并設計用于 J2SE 和 J2EE 應用中,
Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的程式,
它提供了巨大的靈活性而不犧牲簡單性,
你能夠用它來為執行一個作業而創建簡單的或復雜的調度,
1、Job
表示一個任務(作業),要執行的具體內容,
2、JobDetail JobDetail
表示一個具體的可執行的調度程式,Job 是這個可執行程調度程式所要 執行的內容,另外
JobDetail 還包含了這個任務調度的方案和策略,
告訴調度容器,將來執行哪個類(job)的哪個方法
3、Trigger
是一個類,代表一個調度引數的配置,描述觸發Job執行的時間觸發規則,
一個Job可以對應多個Trigger,但一個Trigger只能對應一個Job
4、Scheduler 代表一個調度容器,一個調度容器中可以注冊多個 JobDetail 和Trigger,
Scheduler可以將Trigger系結到某一JobDetail中,這樣當Trigger觸發時,對應的Job就被執行,
Note: 當JobDetail和Trigger在scheduler容器上注冊后,形成了裝配好的作業(JobDetail和Trigger所組成的一對兒),就可以伴隨容器啟動而調度執行了,
二、入門Demo
1、創建Demo工程,加入依賴


2、加入依賴

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itzheng</groupId>
<artifactId>JavaMailDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
</project>
3、創建JobTest類,代碼如下

4、組態檔
添加applicationContext-job.xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 定義一個任務類 -->
<bean id="job" class="com.itzheng.demo.quartz.JobTest">
</bean>
<!-- 任務類描述 -->
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="job"></property>
<property name="targetMethod" value="deJob"></property>
</bean>
<!-- 觸發器 -->
<bean id="mailTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"></property>
<!-- cron 運算式 每 10 秒執行一次 -->
<property name="cronExpression" value="0/10 * * * * ?"></property>
</bean>
<!-- 總管理容器 -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="mailTrigger" />
</list>
</property>
</bean>
</beans>
5、測驗
創建測驗類QuartzTest,注:不能使用junit做測驗,因為一運行完,程式就結束了,

6、運行結果(每隔10秒執行一次)

三、相關概念
1、運算式cron詳解
Cron 運算式是一個字串,字串以 5 或 6 個空格隔開,分為 6 或 7 個域,每一個域代表一個含義,也叫七子運算式,
2、域
1)Seconds(秒):可出現"
, - * /"四個字符,有效范圍為 0-59 的整數
2)Minutes(分鐘):可出現"
, - * /"四個字符,有效范圍為 0-59 的整數
3)Hours(小時):可出現"
, - * /"四個字符,有效范圍為 0-23 的整數
4)DayofMonth(日 of 月):可出現"
, - * / ? LW C"八個字符,有效范圍為1-31的整數
5)Month(月):可出現"
, - * /"四個字符,有效范圍為 1-12 的整數
6)DayofWeek(日 of 星期):可出現"
, - * / ? L C #"八個字符,有效范圍為 1-7 的整數 1 表示星期天,2 表示星期一, 依次類推
7)Year(年):可出現"
, - * /"四個字符,有效范圍為 1970-2099 年
3、字符含義
(1) * 表示匹配該域的任意值,假如在 Minutes 域使用*, 即表示每分鐘都會觸發事件,
(2)? 表示不指定值,只能用在 DayofMonth 和 DayofWeek 兩個域,因為DayofMonth 和 DayofWeek 會相互影響,例如想在每月的 20 日觸發調度,不管20 日到底是星期幾,則只能使用如下寫法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期幾都會觸發,
(3) - 表示范圍,例如在 Minutes 域使用 5-20,表示從 5 分到 20 分鐘每分鐘觸發一次
(4) / 表示起始時間開始觸發,然后每隔固定時間觸發一次,例如在 Minutes 域使用 5/20,則意味著 5 分鐘觸發一次,而 25,45 等分別觸發一次
(5) , 表示列出列舉值值,
例如:在 Minutes 域使用 5,20,則意味著在 5 和 20 分每分鐘觸發一次,
(6)L 表示最后,只能出現在 DayofMonth 和 DayofWeek 域,
如果在 DayofMonth寫 L 表示這個月的最后一天,如果在 DayofWeek 寫 L 表示每個星期的最后一天(星期六) ,
如果在 DayofWeek 域使用 5L,意味著在最后的一個星期四觸發,
(7)W 表示最近有效作業日(周一到周五),只能出現在 DayofMonth 域,系統將在離指定日期的最近的有效作業日觸發事件,
例如:在 DayofMonth 使用 5W,如果 5 日是星期六,則將在最近的作業日:星期五,即 4 日觸發,如果 5 日是星期天,則在 6 日(周一)觸發;如果 5 日在星期一到星期五中的一天,則就在 5 日觸發,另外一點,W 的最近尋找不會跨過月份,
(8)LW:這兩個字符可以連用,表示在某個月最后一個作業日,即最后一個星期五,
(9)#:用于確定每個月第幾個星期幾,只能出現在 DayofWeek 域,
例如在 4#2,表示某月的第二個星期三,
4、示例
“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 4” 每年三月的星期三的下午 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 觸發,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239120.html
標籤:其他
