0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot Quartz在Java Project中的使用

jf_78858299 ? 來源:SpringBoot ? 作者:林祥纖 ? 2023-04-12 10:53 ? 次閱讀

這一篇文章,我們緊接著上一篇的文章,講講在Quartz在java project的項(xiàng)目中如何進(jìn)行使用,在這里我們使用maven進(jìn)行構(gòu)建項(xiàng)目。先看下本章的大綱:

(1)新建工程quartz-java;

(2)配置pom.xml文件;

(3)編碼說明;

(4)編寫Job類;

(5)編寫啟動(dòng)類進(jìn)行代碼測(cè)試;

(6)quartz.properties配置文件說明;

接下里一起看下具體的內(nèi)容:

(1)新建工程quartz-java;

新建一個(gè)java project取名為quartz-java。

(2)配置pom.xml文件;

在pom.xml文件中添加quartz的依賴:
<groupId>org.quartz-scheduler<span class="hljs-name"groupId>

 <artifactId>quartz<span class="hljs-name"artifactId>

 <version>2.2.3<span class="hljs-name"version>

(3)編碼說明;

(一)首先我們需要定義一個(gè)任務(wù)類,比如為HelloJob ,該類需要繼承Job類,然后添加execute(JobExecutionContext context)方法,在這個(gè)方法中就是我們具體的任務(wù)執(zhí)行的地方。

(二)在哪里定義“在什么時(shí)候執(zhí)行什么任務(wù)呢?”:那么我們需要Scheduler,此類的創(chuàng)建方式使用Quartz提供的工廠類StdSchedulerFactory.getDefaultScheduler()進(jìn)行創(chuàng)建。

(三)如何觸發(fā)呢:scheduler.scheduleJob(jobDetail,trigger);進(jìn)行觸發(fā)定時(shí)任務(wù),在這里需要兩個(gè)參數(shù)。jobDetail可以通過JobBuilder.newJob進(jìn)行創(chuàng)建,在這里就需要制定一個(gè)Job類了,也就是我們第一步創(chuàng)建的HelloJob;trigger類的話,可以通過TriggerBuilder.newTrigger進(jìn)行創(chuàng)建。

(4)編寫Job類;

編寫HelloJob任務(wù)類:

package com.kfit.job;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

/**

  • 任務(wù)類.
  • @author Angel --守護(hù)天使
  • @version v.0.1
  • @date 2017年4月21日

*/

**public **class HelloJob implements Job{

**public ****void** execute(JobExecutionContext context) **throws**JobExecutionException {

    // 執(zhí)行響應(yīng)的任務(wù).

   System. ***out*** .println("HelloJob.execute,"+**new** Date());

}

}

(5)編寫啟動(dòng)類進(jìn)行代碼測(cè)試;

在Main方法中進(jìn)行編碼測(cè)試:

package com.kfit;

import java.util.concurrent.TimeUnit;

import org.quartz.JobBuilder;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SimpleScheduleBuilder;

import org.quartz.Trigger;

import org.quartz.TriggerBuilder;

import org.quartz.impl.StdSchedulerFactory;

import com.kfit.job.HelloJob;

/**

  • 直接在Main方法中進(jìn)行啟動(dòng)測(cè)試.
  • @author Angel --守護(hù)天使
  • @version v.0.1
  • @date 2017年4月21日

*/

**public **class App {

**public ****static ****void** main(String[] args) **throws** SchedulerException, InterruptedException {

   /*

    *在 Quartz 中, scheduler 由 scheduler 工廠創(chuàng)建:DirectSchedulerFactory或者StdSchedulerFactory。第二種工廠StdSchedulerFactory 使用較多,

    *因?yàn)镈irectSchedulerFactory 使用起來不夠方便,需要作許多詳細(xì)的手工編碼設(shè)置。

    */

   // 獲取Scheduler實(shí)例

   Scheduler scheduler = StdSchedulerFactory. *getDefaultScheduler* ();

   scheduler.start();

   System. ***out*** .println("scheduler.start");

  

   //具體任務(wù).

   JobDetail jobDetail = JobBuilder. *newJob* (HelloJob. **class** ).withIdentity("job1","group1").build();

  

   //觸發(fā)時(shí)間點(diǎn). (每5秒執(zhí)行1次.)

   SimpleScheduleBuilder simpleScheduleBuilder =SimpleScheduleBuilder. *simpleSchedule* ().withIntervalInSeconds(5).repeatForever();

   Trigger trigger = TriggerBuilder. *newTrigger* ().withIdentity("trigger1","group1").startNow().withSchedule(simpleScheduleBuilder).build();

  

   // 交由Scheduler安排觸發(fā)

   scheduler.scheduleJob(jobDetail,trigger);

  

   //睡眠20秒.

   TimeUnit. ***SECONDS*** .sleep(20);

   scheduler.shutdown();//關(guān)閉定時(shí)任務(wù)調(diào)度器.

   System. ***out*** .println("scheduler.shutdown");

}

}

執(zhí)行代碼查看控制臺(tái)的打印信息

scheduler.start

HelloJob.execute,Fri Apr 2119:50:01 CST 2017

HelloJob.execute,Fri Apr 2119:50:06 CST 2017

HelloJob.execute,Fri Apr 2119:50:11 CST 2017

HelloJob.execute,Fri Apr 2119:50:16 CST 2017

HelloJob.execute,Fri Apr 2119:50:21 CST 2017

scheduler.shutdown

(6)quartz.properties配置文件說明;

Quartz中有一個(gè)配置quartz.properties可以配置參數(shù),比如:線程池的容量,實(shí)例名稱。比如:

org.quartz.scheduler.instanceName= MyScheduler

org.quartz.threadPool.threadCount= 3

org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore

org.quartz.threadPool.threadCount:配置線程池的容量,即表示同時(shí)最多可運(yùn)行的線程數(shù)量。

org.quartz.scheduler.instanceName:scheduler實(shí)例名稱。

org.quartz.jobStore.class:job存儲(chǔ)方式,RAMJobStore是使用JobStore最簡(jiǎn)單的一種方式,它也是性能最高效的,顧名思義,JobStore是把它的數(shù)據(jù)都存儲(chǔ)在RAM中,這也是它的快速和簡(jiǎn)單配置的原因;JDBCJobStore也是一種相當(dāng)有名的JobStore,它通過JDBC把數(shù)據(jù)都保存到數(shù)據(jù)庫中,所以在配置上會(huì)比RAMJobStore復(fù)雜一些,而且不像RAMJobStore那么快,但是當(dāng)我們對(duì)數(shù)據(jù)庫中的表的主鍵創(chuàng)建索引時(shí),性能上的缺點(diǎn)就不是很關(guān)鍵的了。

您可以在代碼中打印scheduler實(shí)例名稱,如下代碼:

Scheduler scheduler =StdSchedulerFactory. getDefaultScheduler ();

scheduler.start();

   System. ***out*** .println("scheduler.start");

   System. ***out*** .println(scheduler.getSchedulerName());
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2952

    瀏覽量

    104479
  • Quartz
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7924
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    java spring教程

    Spring核心概念介紹控制反轉(zhuǎn)(IOC)依賴注入(DI)集合對(duì)象注入等Bean的管理BeanFactoryApplicationContextSpring web的使用
    發(fā)表于 09-11 11:09

    什么是java spring

    的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring受益。Sprin
    發(fā)表于 09-11 11:16

    Spring bootRedis的使用

    【本人禿頂程序員】springboot專輯:Spring bootRedis的使用
    發(fā)表于 03-27 11:42

    啟動(dòng)Spring Boot項(xiàng)目應(yīng)用的三種方法

    基礎(chǔ)。我們知道了Spring Boot是個(gè)什么了,那么我們又該如何啟動(dòng)Spring Boot應(yīng)用呢?這里小編給大家推薦常用的三種方法。分別是IDEA編輯器啟動(dòng)、命令啟動(dòng)、
    發(fā)表于 01-14 17:33

    java 日志框架Spring Boot分析

    引言:我們需要在已有的微服務(wù)代碼添加日志功能,用于輸出需要關(guān)注的內(nèi)容,這是最平常的技術(shù)需求了。由于我們的微服務(wù)代碼是基于SpringBoot開發(fā)的,那么問題就轉(zhuǎn)換為如何在Spring Boot
    發(fā)表于 09-28 14:58 ?0次下載

    Spring Boot從零入門1 詳述

    開始學(xué)習(xí)Spring Boot之前,我之前從未接觸過Spring相關(guān)的項(xiàng)目,Java基礎(chǔ)還是幾年前自學(xué)的,現(xiàn)在估計(jì)也忘得差不多了吧,寫
    的頭像 發(fā)表于 12-10 22:18 ?592次閱讀

    "Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--轉(zhuǎn)"

    "Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--轉(zhuǎn)"
    發(fā)表于 12-01 18:06 ?6次下載
    "Scalable, Distributed Systems Using Akka, <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>, DDD, and <b class='flag-5'>Java</b>--轉(zhuǎn)"

    Spring Boot特有的實(shí)踐

    Spring Boot是最流行的用于開發(fā)微服務(wù)的Java框架。本文中,我將與你分享自2016年以來我專業(yè)開發(fā)中使用
    的頭像 發(fā)表于 09-29 10:24 ?860次閱讀

    Spring Boot整合兩種定時(shí)任務(wù)的方法

    框架 QuartzSpring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個(gè) Spring
    的頭像 發(fā)表于 04-07 14:55 ?1502次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b><b class='flag-5'>中</b>整合兩種定時(shí)任務(wù)的方法

    QuartzWeb應(yīng)用單獨(dú)使用

    Quartz也常用在Web應(yīng)用,常見的是交由Spring托管的形式,但這里并非介紹這個(gè)。這里介紹QuartzWeb應(yīng)用
    的頭像 發(fā)表于 04-12 10:55 ?519次閱讀

    Spring Boot如何使用定時(shí)任務(wù)

    本文介紹 Spring Boot 如何使用定時(shí)任務(wù),使用非常簡(jiǎn)單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?936次閱讀

    Spring Boot Actuator快速入門

    不知道大家Spring Boot 項(xiàng)目的過程,使用過 Spring Boot Actua
    的頭像 發(fā)表于 10-09 17:11 ?591次閱讀

    Spring Boot啟動(dòng) Eureka流程

    在上篇已經(jīng)說過了 Eureka-Server 本質(zhì)上是一個(gè) web 應(yīng)用的項(xiàng)目,今天就來看看 Spring Boot 是怎么啟動(dòng) Eureka 的。 Spring
    的頭像 發(fā)表于 10-10 11:40 ?839次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動(dòng) Eureka流程

    Spring Boot的啟動(dòng)原理

    可能很多初學(xué)者會(huì)比較困惑,Spring Boot 是如何做到將應(yīng)用代碼和所有的依賴打包成一個(gè)獨(dú)立的 Jar 包,因?yàn)閭鹘y(tǒng)的 Java 項(xiàng)目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?597次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動(dòng)原理

    Spring Boot 的設(shè)計(jì)目標(biāo)

    ,這樣我們就可以盡快的上手。 使用 Spring Boot 來不僅可以創(chuàng)建基于 war 方式部署的傳統(tǒng)Java應(yīng)用程序,也可以通過創(chuàng)建獨(dú)立的不依賴任何容器(如 tomcat 等)
    的頭像 發(fā)表于 10-13 14:56 ?541次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計(jì)目標(biāo)