1. 程式人生 > >spring boot 2.0 quartz 輕鬆實現定時任務和作業排程

spring boot 2.0 quartz 輕鬆實現定時任務和作業排程

    最近在做一個彩票相關的專案,主要涉及到不定時開獎,不定時封盤,原本打算使用spring boot 自帶的Schedule進行這一系列的工作,由於不能自動的新增定時任務,所以使用quartz,spring boot 2.0集成了quartz,所以決定嘗試下quartz用於實現作業排程。

    做的時候查看了很多資料,都寫的花裡胡哨的,要麼就是做的東西太完整了,要麼就是完全不能理解,要麼就是很早以前的做法了,讓人很頭暈,所以說做個很簡單明瞭的教程,說一下如何使用

    https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/#boot-features-quartz

   build.gradle:

buildscript {
	ext {
		springBootVersion = '2.0.3.RELEASE'
	}
	repositories {
		maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.zhu'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}
}


dependencies {
	compile('org.springframework.boot:spring-boot-starter-web')
	compile('org.springframework.boot:spring-boot-starter-quartz')
	testCompile('org.springframework.boot:spring-boot-starter-test')
}

    build.gradle中引入spring-boot-starter-quartz

    之後如果沒什麼特殊需求的話,根本不需要任何的花裡胡哨的配置,直接編碼。

    建立 ScheduleService.java,用於建立定時任務,這裡動態的建立了兩個定時任務,每隔1秒和每隔2秒執行。建立時需要新建JobDetail(任務)以及CronTrigger(定時任務觸發器) ,並且scheduler.scheduleJob(jobDetail,cronTrigger);把任務新增到任務佇列中。

package com.zhu.zqjc.schedule;

import com.zhu.zqjc.bean.enums.FootballStatus;
import com.zhu.zqjc.dao.FootBallMatchDao;
import com.zhu.zqjc.entity.FootBallMatch;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Service
public class ScheduleService {
    @Autowired
    private Scheduler scheduler;
    public void testScheduleTask() throws SchedulerException {
        for (int i = 1; i < 3; i++) {
        JobDetail jobDetail = JobBuilder.newJob(TestSchedule.class)
                .withIdentity("updateMatch"+i, "updateMatch")
                .withDescription("定時比賽Id為"+i)
                .build();
        //cron表示式 表示每隔i秒執行
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(String.format("0/%d * * * * ? ",i))
                .withMisfireHandlingInstructionDoNothing();

        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                .withIdentity("updateMatch"+i, "updateMatch")
                .withDescription("定時比賽Id為"+i)
                .withSchedule(scheduleBuilder)
                .startNow().build();

        scheduler.scheduleJob(jobDetail,cronTrigger);

        }

    }
}

TestSchedule.java 定時任務的執行類,在executeInternal函式中執行定時任務的邏輯

package com.zhu.zqjc.schedule;

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

public class TestSchedule  extends QuartzJobBean {
    /**
     * Execute the actual job. The job data map will already have been
     * applied as bean property values by execute. The contract is
     * exactly the same as for the standard Quartz execute method.
     *
     * @param context
     * @see #execute
     */
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("定時任務執行 " + context.getJobDetail().getDescription());
    }
}

StartListen.java 執行定時任務

package com.zhu.zqjc.listener;



import com.zhu.zqjc.bean.enums.FootballStatus;
import com.zhu.zqjc.conf.SystemConf;
import com.zhu.zqjc.dao.FootBallMatchDao;
import com.zhu.zqjc.entity.FootBallMatch;
import com.zhu.zqjc.schedule.ScheduleService;
import com.zhu.zqjc.schedule.UpdateMatchSchedule;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import weixin.popular.support.TokenManager;

import java.util.Arrays;
import java.util.List;


/**
 * Created by zhu yingzhi on 2018/6/6.
 * @author  yingzhi zhu
 *
 */
@Component
public class StartListen implements ApplicationListener<ApplicationReadyEvent> {

    
    @Autowired
    private ScheduleService scheduleService;


    @Override
    public void onApplicationEvent(final ApplicationReadyEvent event) {
        try {
            scheduleService.testScheduleTask();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

執行效果:


相關推薦

spring boot 2.0 quartz 輕鬆實現定時任務作業排程

    最近在做一個彩票相關的專案,主要涉及到不定時開獎,不定時封盤,原本打算使用spring boot 自帶的Schedule進行這一系列的工作,由於不能自動的新增定時任務,所以使用quartz,spring boot 2.0集成了quartz,所以決定嘗試下quartz用

Spring Boot 2.X(十二):定時任務

簡介 定時任務是後端開發中常見的需求,主要應用場景有定期資料報表、定時訊息通知、非同步的後臺業務邏輯處理、日誌分析處理、垃圾資料清理、定時更新快取等等。 Spring Boot 集成了一整套的定時任務工具,讓我們專注於完成邏輯,剩下的基礎排程工作將自動完成。 通用實現方式 實現方式 描述 jav

從零實現 Spring Boot 2.0 整合 weixin-java-mp(weixin-java-tools) 獲取 openId,用於微信授權

步驟: 一、內網穿透申請二級域名(有伺服器和域名者可略過) 二、申請微信公眾平臺測試號(有已認證的微信服務號者可略過) 三、搭建 Spring Boot 2.0 專案實現獲取openId 一、內網穿透: 因為要直接用內網本機開發除錯,微信網頁授權在回撥時要訪問本機,所以直接

spring-boot-2.0.3之redis快取實現,不是你想的那樣哦!

前言   開心一刻     小白問小明:“你前面有一個5米深的坑,裡面沒有水,如果你跳進去後該怎樣出來了?”小明:“躺著出來唄,還能怎麼出來?”小白:“為什麼躺著出來?”小明:“5米深的坑,還沒有水,跳下去不死就很幸運了,殘是肯定會殘的,不躺著出來,那能怎麼出來?”小白:“假設沒死也沒殘呢?”小明:“你當

spring-boot-2.0.3之redis快取實現,不是你想的那樣哦

前言  開心一刻     小白問小明:“你前面有一個5米深的坑,裡面沒有水,如果你跳進去後該怎樣出來了?”小明:“躺著出來唄,還能怎麼出來?”小白:“為什麼躺著出來?”小明:“5米深的坑,還沒有水,跳下去不死就很幸運了,殘是肯定會殘的,不躺著出來,那能怎麼出來?”小白:“假設沒死也沒殘呢?”小明:“你當我超

Spring Boot Admin 詳解(Spring Boot 2.0,基於 Eureka 的實現

Spring Boot Admin 用於監控基於 Spring Boot 的應用,它是在 Spring Boot Actuator 的基礎上提供簡潔的視覺化 WEB UI。 (一)簡介 Spring Boot Admin 提供了很多功能,如顯示 name、id 和 version,顯示線上狀態,

spring輕鬆實現定時任務,quartz表示式的線上Cron表示式生成器推薦

東西雖簡單,保留下來,開箱即用,省時省力!!!!! 1.首先在pom.xml中引入quartz相關包  <dependency>               <groupId>org.quartz-scheduler</groupId>

spring boot 2.0之使用spring boot

架構 spring spring boot依賴每一個spring boot的發型版本都包含了所依賴的版本,如果升級spring boot版本,其依賴也會同步更新升級。maven的用戶可以通過繼承spring-boot-starter-parent。其包含了一些合理的值的設置:1. 默認設置的編譯器為J

Spring Boot 2.0.0.M7 生產環境部署

nbsp list left print 20px package active padding over springboot 生產環境註意事項 1.去除不需要的 jar開發工具jar:spring-boot-devtools監控一定要做好權限控制或者去除控制jar:sp

Spring Boot 2.0(一):【重磅】Spring Boot 2.0權威發布

Spring Boot就在昨天Spring Boot2.0.0.RELEASE正式發布,今天早上在發布Spring Boot2.0的時候還出現一個小插曲,將Spring Boot2.0同步到Maven倉庫的時候出現了錯誤,然後Spring Boot官方又趕緊把 GitHub 上發布的 v2.0.0.RELEA

阿裏P9告訴你 Spring Boot 2.0正式發布,升還是不升呢?

Java spring spring Boot Spring帝國Spring幾乎是每一位Java開發人員都耳熟能詳的開發框架,不論您是一名初出茅廬的程序員還是經驗豐富的老司機,都會對其有一定的了解或使用經驗。在現代企業級應用架構中,Spring技術棧幾乎成為了Java語言的代名詞,那麽Spring

Spring Boot 2.0(二):Spring Boot 2.0嘗鮮-動態 Banner

版本 手動 block OS 動態 posit 下載 網站 dep Spring Boot 2.0 提供了很多新特性,其中就有一個小彩蛋:動態 Banner,今天我們就先拿這個來嘗嘗鮮。 配置依賴 使用 Spring Boot 2.0 首先需要將項目依賴包替換為剛剛發布的

Spring boot 2.0 新特性之動態 Banner

body 回復 更換 and 超過 方式 有一個 特性 pos Spring Boot 2.0 提供了很多新特性,其中就有一個小彩蛋:動態 Banner,今天我們就先拿這個來嘗嘗鮮。 配置依賴 使用 Spring Boot 2.0 首先需要將項目依賴包替換為剛剛發布的

Spring Boot 2.0(三):Spring Boot 開源軟件都有哪些?

Spring Boot 開源 2016年 Spring Boot 還沒有被廣泛使用,在網上查找相關開源軟件的時候沒有發現幾個,到了現在經過2年的發展,很多互聯網公司已經將 Spring Boot 搬上了生產,而使用 Spring Boot 的開源軟件在 Github/碼雲 上面已有不少,這篇文章就給大

Spring+Quartz框架實現定時任務(集群,分布式)

log cor alt 放置 這一 表達 mod 建數據庫 strac 1、定時任務的必要性:定時任務在應用中的重要性不言而喻,大多是應用,特別是金融應用更是離不開定時任務,能用定時任務來處理異常訂單,完成跑批,定時活動(雙11)等。在初期應用的訪問量並不是那麽大,

spring-boot 2.0 多模塊化項目EurekaServer的搭建

集群 gem 開啟 優點 pac cat reg manage 框架 Spring boot由於其   1、易於開發和維護。2、單個微服務啟動快。3、局部修改部署容易。4、技術棧不受語言限制等優點受到越來越多公司的重視。spring-boot還集成了許多關於微服務開發的框

Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 實踐

work 加載 ports access 分享圖片 htm 初始化 visit edi 我知道大家這段時間看了我寫關於 docker 相關的幾篇文章,不疼不癢的,仍然沒有感受 docker 的便利,是的,我也是這樣認為的,I know your felling 。 前期了解

Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 開源軟件雲收

Spring Boot Dokcer 雲收藏 只需三步即可部署開源項目雲收藏,打造專屬個人的收藏系統,就是這麽簡單! 雲收藏項目已經開源2年多了,作為當初剛開始學習 Spring Boot 的練手項目,使用了很多當時很新的技術,現在看來其實很多新技術是沒有必要使用的,但做為學習案例來講確實是一個絕

Spring Boot 2.0 整合Thymeleaf 模板引擎

reporting 配置信息 name www. title 建模 type 引擎 suffix 本節將和大家一起實戰Spring Boot 2.0 和thymeleaf 模板引擎 1. 創建項目 2. 使用Spring Initlizr 快速創建Spring Boot

Java Spring boot 2.0 跨域問題

直接 https 例子 base HR 分享 bsp site methods 跨域 一個資源會發起一個跨域HTTP請求(Cross-site HTTP request), 當它請求的一個資源是從一個與它本身提供的第一個資源的不同的域名時 。 比如說,域名A(http://