1. 程式人生 > >Java定時任務排程工具詳解(5)— Quartz 之 Trigger

Java定時任務排程工具詳解(5)— Quartz 之 Trigger

五、淺談Trigger

Trigger是什麼

Quartz中的觸發器用來告訴排程程式作業什麼時候觸發
即Trigger物件是用來觸發執行Job的

Quartz框架中的Trigger示意圖
這裡寫圖片描述

觸發器通用屬性

  • JobKey:表示job例項的標識,觸發器被觸發時,該指定的job例項會執行;
  • StartTime:表示觸發器的時間表首次被觸發的時間,它的值的型別是Java.util.Date;
  • EndTime:指定觸發器的不再被觸發的時間,它的值的型別是Java.util.Date。

程式碼演示

HelloJob類改造

package helloquartz.three;

import
java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.Trigger; /** * 自定義任務 觸發器通用屬性 */ public class HelloJob implements Job { @Override public void
execute(JobExecutionContext context) throws JobExecutionException { // 列印當前的執行時間,格式為2017-01-01 00:00:00 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("--------Current Exec Time Is : " + sf.format(date)); Trigger currentTrigger = context.getTrigger(); System.out.println("--------Start Time Is : "
+ sf.format(currentTrigger.getStartTime())); System.out.println("--------End Time Is : " + sf.format(currentTrigger.getEndTime())); JobKey jobKey = currentTrigger.getJobKey(); System.out.println("--------JobKey info : " + " jobName : " + jobKey.getName() + " jobGroup : " + jobKey.getGroup()); } }

HelloScheduler類改造

package helloquartz.three;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 任務排程類  觸發器通用屬性
 */
public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {
        // 列印當前的執行時間,格式為2017-01-01 00:00:00
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("--------Current Time Is : " + sf.format(date));

        // 建立一個 JobDetail 例項,將該例項與 HelloJob 例項繫結
        JobDetail jobDeatil = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myjob", "jobgroup1")// 定義識別符號
                .build();

        // 獲取距離當前時間3秒後的時間
        date.setTime(date.getTime() + 3000);
        // 獲取距離當前時間6秒後的時間
        Date endDate = new Date();
        endDate.setTime(endDate.getTime() + 6000);

        // 建立一個 Trigger 例項,定義該 job 立即執行,並且每隔兩秒重複執行一次,直到永遠
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger","trigroup1")// 定義識別符號
                .startAt(date)// 定義3秒後執行
                .endAt(endDate)// 定義6秒後結束
                .withSchedule(SimpleScheduleBuilder
                        .simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())// 定義執行頻度
                .build();

        // 建立 Scheduler 例項
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();

        // 繫結 JobDetail 和 trigger
        scheduler.scheduleJob(jobDeatil, trigger);

        // 執行任務
        scheduler.start();
    }
}

執行結果:

--------Current Time Is : 2018-03-06 19:48:21
2018-03-06 19:48:21,574 [INFO ][main] Using default implementation for ThreadExecutor  (org.quartz.impl.StdSchedulerFactory:StdSchedulerFactory.java:1172) 
2018-03-06 19:48:21,578 [INFO ][main] Job execution threads will use class loader of thread: main  (org.quartz.simpl.SimpleThreadPool:SimpleThreadPool.java:268) 
2018-03-06 19:48:21,592 [INFO ][main] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl  (org.quartz.core.SchedulerSignalerImpl:SchedulerSignalerImpl.java:61) 
2018-03-06 19:48:21,592 [INFO ][main] Quartz Scheduler v.2.2.3 created.  (org.quartz.core.QuartzScheduler:QuartzScheduler.java:240) 
2018-03-06 19:48:21,593 [INFO ][main] RAMJobStore initialized.  (org.quartz.simpl.RAMJobStore:RAMJobStore.java:155) 
2018-03-06 19:48:21,593 [INFO ][main] Scheduler meta-data: Quartz Scheduler (v2.2.3) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
  (org.quartz.core.QuartzScheduler:QuartzScheduler.java:305) 
2018-03-06 19:48:21,593 [INFO ][main] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'  (org.quartz.impl.StdSchedulerFactory:StdSchedulerFactory.java:1327) 
2018-03-06 19:48:21,593 [INFO ][main] Quartz scheduler version: 2.2.3  (org.quartz.impl.StdSchedulerFactory:StdSchedulerFactory.java:1331) 
2018-03-06 19:48:21,594 [INFO ][main] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.  (org.quartz.core.QuartzScheduler:QuartzScheduler.java:575) 
--------Current Exec Time Is : 2018-03-06 19:48:24
--------Start Time Is : 2018-03-06 19:48:24
--------End Time Is : 2018-03-06 19:48:27
--------JobKey info :  jobName : myjob jobGroup : jobgroup1
--------Current Exec Time Is : 2018-03-06 19:48:26
--------Start Time Is : 2018-03-06 19:48:24
--------End Time Is : 2018-03-06 19:48:27
--------JobKey info :  jobName : myjob jobGroup : jobgroup1

相關推薦

Java定時任務排程工具5Quartz Trigger

五、淺談Trigger Trigger是什麼 Quartz中的觸發器用來告訴排程程式作業什麼時候觸發 即Trigger物件是用來觸發執行Job的 Quartz框架中的Trigger示意圖 觸發器通用屬性 JobKey:表示job例項的標識,觸發

Java定時任務排程工具Timer篇(初級)

一.Timer簡介 定時任務的基本概念,Timer的函式,綜合運用和缺陷 基於給定的時間點,給定的時間間隔或者給定的執行次數自動執行的任務。 Timer 和Quartz Timer: 出身:由jdk提供,呼叫方式簡單粗暴; 能力:Timer能完成

Java定時任務排程工具Timer

做專案很多時候會用到定時任務,比如在深夜,流量較小的時候,做一些統計工作。早上定時傳送郵件,更新資料庫等。 這裡可以用Java的Timer或執行緒池實現。 Timer可以實現,不過Timer存在一些問題。他起一個單執行緒,如果有異常產生,執行緒將退出,整個定時任務就失敗。 Timer

Java定時任務調度

fix let 核心概念 purge 多個 rop 開源 scheduler color 前言 在實際項目開發中,除了Web應用、SOA服務外,還有一類不可缺少的,那就是定時任務調度。定時任務的場景可以說非常廣泛,比如某些視頻網站,購買會員後,每天會給會員送成長值,每月會

Java定時任務排程工具最詳細的解析

本文對Java定時任務排程工具進行解析。 什麼是定時任務排程 基於給定的時間點,給定的時間間隔或者給定的執行次數自動執行的任務 java.util.Timer和Quartz的區別 出生不同 能力區別 底層機制 java.util.Timer的簡介 有且僅有一個後臺執行

java-定時任務排程工具Timer/Quartz|springboot整合定時排程

什麼是定時任務排程 定時任務排程:基於給定的時間點,給定的時間間隔或者給定的執行次數自動執行任務。 兩種java定時任務排程工具卻別 Timer Quartz 小弟!功能簡單,開銷小 大

Java 定時任務實現原理

在jdk自帶的庫中,有兩種技術可以實現定時任務。一種是使用Timer,另外一個則是ScheduledThreadPoolExecutor。下面為大家分析一下這兩個技術的底層實現原理以及各自的優缺點。 一、Timer 1. Timer的使用 class MyTask exte

JAVA線程池原理1

err 最大 RKE private queue 分享 ren ++ ant 線程池的優點 1、線程是稀缺資源,使用線程池可以減少創建和銷毀線程的次數,每個工作線程都可以重復使用。 2、可以根據系統的承受能力,調整線程池中工作線程的數量,防止因為消耗過多內存導致服務器崩潰。

JAVA:Excel匯入匯出3--匯出

Excel匯出 一、設定查詢條件 注意:無法通過Ajax下載 jsp程式碼 <form class="col-sm-2" action="/manage/order/download" method="post" onsubmit="checkForm()"

JAVA:Excel匯入匯出2--匯入

1. 瀏覽資料夾,選擇需要上傳的檔案 程式碼 jsp <li class="col-sm-1"> <span>上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&a

Java效能分析神器-JProfiler

前段時間在給公司專案做效能分析,從簡單的分析Log(GC log, postgrep log, hibernate statitistic),到通過AOP蒐集軟體執行資料,再到PET測試,感覺時間花了不少,效能也有一定的提升,但總感覺像是工作在原始時代,無法簡單順暢,又無比清

AngularJs自定義指令5 - link

演示 hang cursor off drag font 雙向 事件 date 在指令中操作DOM,我們需要link參數,這參數要求聲明一個函數,稱之為鏈接函數。 寫法: link: function(scope, element, attrs) {  // 在這裏操作DO

指標5-- 布林線指標BOLL

tar 線下 pan evel 隨著 向上 log link bsp 一、定義:布林線指標,即BOLL指標,其英文全稱是“Bollinger Bands”,布林線(BOLL)由約翰·布林先生創造,其利用統計原理,求出股價的標準差及其信賴區間,從而確定股價的波動範圍及未來走勢

git 使用5—— get log 查看提交歷史

校驗和 看到了 有一個 基本 detached pack 有意思 lin mls git log 查看 提交歷史 在提交了若幹更新之後,又或者克隆了某個項目,想回顧下提交歷史,可以使用 git log 命令查看。 接下來的例子會用我專門用於演示的 simplegit 項目,

EasyPR--開發5顏色定位與偏斜扭轉

  本篇文章介紹EasyPR裡新的定位功能:顏色定位與偏斜扭正。希望這篇文件可以幫助開發者與使用者更好的理解EasyPR的設計思想。   讓我們先看一下示例圖片,這幅圖片中的車牌通過顏色的定位法進行定位並從偏斜的視角中扭正為正視角(請看右圖的左上角)。 圖1 新版本的定位效果     下

深度學習優化函式5-- Nesterov accelerated gradient (NAG)

深度學習優化函式詳解系列目錄 上一篇文章講解了猶如小球自動滾動下山的動量法(momentum)這篇文章將介紹一種更加“聰明”的滾動下山的方式。動量法每下降一步都是由前面下降方向的一個累積和當前點的梯度方向組合而成。於是一位大神(Nesterov)就開始思考,

XILINX_zynq_5

下面做一個從uart列印hello world的實驗,只用PS,不用PL部分,程式從SD卡啟動,跑在PS的內部RAM. zynq 7000的PS雖然也是CPU,但是開發方法不像普通的CPU只需要一個SDK就可以了,它還需要vivado硬體設計軟體. 所以ZYNQ 7000的PS開發需要兩個工具,一個是vi

第四章 Controller介面控制器5

4.16、資料型別轉換和資料驗證 流程: 1、首先建立資料繫結器,在此此會建立ServletRequestDataBinder類的物件,並設定messageCodesResolver(錯誤碼解析器); 2、提供第一個擴充套件點,初始化資料繫結器,在此處我們可以覆蓋該方法註

linux下的Makefile5

使用條件判斷 —————— 使用條件判斷,可以讓make根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。 一、示例 下面的例子,判斷$(CC)變數是否“gcc”,如果是的話,則使用GNU函式編譯目標。 libs_for_gcc = -lgnu normal_lib

Spring Security認證核心元件和服務

一直以來都特別喜歡Spring的全家桶系列,也一直想寫關於Spring Security的系列文章,接觸security從最初的Guide開始入手,到專案中的原始碼閱讀,最近又沉下心來看了幾遍文件,打算嘗試一下,把我的理解都記錄下來,寫一個較為完整的系列文章。