1. 程式人生 > >spring-task定時任務動態配置修改執行時間

spring-task定時任務動態配置修改執行時間

因專案需要,幾個定時任務需要人為動態設定執行時間,於是乎吧,就查閱相關資料,是可以動態設定的,廢話不多說,直接上程式碼,一目瞭然。

package com.seckill.quartz;

import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

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

/**
 * Created by loup on 2017/11/11.
 */
@Component
@EnableScheduling
public class DynamicScheduledTask implements SchedulingConfigurer {

    //時間表達式  每2秒執行一次
    private String cron = "0/2 * * * * ?";

    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                //任務邏輯
                System.out.println("---------------start-------------------");
                System.out.println("動態修改定時任務引數,時間表達式cron為:" + cron);
                System.out.println("當前時間為:" + sdf.format(new Date()));
                System.out.println("----------------end--------------------");
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                CronTrigger cronTrigger = new CronTrigger(cron);
                Date nextExecDate = cronTrigger.nextExecutionTime(triggerContext);
                return nextExecDate;
            }
        });
    }

    public void setCron(String cron) {
        this.cron = cron;
    }
}
 這個是定時任務排程執行器,採用的是註解的方式。首先要動態配置,要設定為@EnableScheduling,這是確保能夠動態,然後實現SchedulingConfigurer,重寫configureTasks方法,接下來就是這個的相關spring配置檔案,要引入下面這個task,不然識別不了啊,配置檔案就是這麼簡單
http://www.springframework.org/schema/task
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.seckill.quartz"/>

    <task:annotation-driven />

</beans>
接下來就是寫測試類,測試可不可行啊
package com.seckill.quartz;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.io.IOException;

/**
 * Created by loup on 2017/11/11.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath*:/conf/spring-quartz.xml"})
public class QuartzTest {

    @Autowired
    private DynamicScheduledTask dynamicScheduledTask;

    @Test
    public void test1(){
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        dynamicScheduledTask.setCron("0/10 * * * * ?");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

執行測試類,檢視結果,達到效果,親測可用




相關推薦

spring-task定時任務動態配置修改執行時間

因專案需要,幾個定時任務需要人為動態設定執行時間,於是乎吧,就查閱相關資料,是可以動態設定的,廢話不多說,直接上程式碼,一目瞭然。 package com.seckill.quartz; import org.springframework.scheduling.Trig

spring task 定時任務 配置

<task:executor id="executor" pool-size="10"/> <task:scheduler id="scheduler" pool-size="10"/> <task:annotation-dri

Spring @Scheduled定時任務動態修改cron引數

  Spring框架自3.0版本起,自帶了任務排程功能,好比是一個輕量級的Quartz,而且使用起來也方便、簡單,且不需要依賴其他的JAR包。秉承著Spring的一貫風格,Spring任務排程的實現同時支援註解配置和XML配置兩種方式。   再來談談變態的專案需求:我們正在做一個智慧數字電錶的資料採集專案,

Spring Task 定時任務

zh-cn 啟動 功能 創建 content p s 調用 can oca   所謂定時任務。就是依據我們設定的時間定時運行任務,就像定時發郵件一樣,設定時間到了。郵件就會自己主動發送。   在Spring大行其道的今天,Spring也提供了其定時任務功能,Spring

spring + quartz定時任務,以及修改定時任務

blog public schedule col ping ppi string time 找到 spring4+quartz2.2.3,定時任務弄好了,修改定時任務沒折騰起,沒找到合適的解決方案。 最終使用庫spring-context-support 3.2.17.RE

Quartz cron 表示式(linux 定時器,java 定時任務spring task定時任務)

原文地址:https://blog.csdn.net/feng27156/article/details/39293403 Quartz cron 表示式的格式十分類似於 UNIX cron 格式,但還是有少許明顯的區別。區別之一就是 Quartz 的格式向下支援到秒級別的計劃,而 UNIX cron 計劃

spring quartz定時任務整合配置(ssm,ssh專案都適用)

  轉自:https://www.tpyyes.com/a/javaweb/2017/0310/79.html spring整合配置quartz定時器任務非常的簡單,本專案是基於ssm maven專案的整合,如果你是ssh專案,請下載spring-context-support-4

springboot 定時任務(動態新增修改 )

 考慮Scheduled 註解 動態改變cron 表示式來達到修改任務的執行時間 (例如現在有個定時任務1分鐘執行一次 ,當我通過呼叫介面時 會修改為定時任務 5分鐘執行)無奈 cron 的表示式的值只能為常量實現方式一  未實現動態新增實現 SchedulingConfig

基於springboot ThreadPoolTaskScheduler類實現定時任務動態新增修改

需求:有不定個的定時任務模板需要建立,定時任務在執行過程中,激發時間等屬性可能發生修改. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.b

spring task 定時任務 註解方式 demo

類: package com.task; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.ster

Spring task 定時任務的兩種用法(時間設定在.xml裡或者在 @註解裡)

spring 4.1.7jdk1.81.時間設定在javaBean的@註解裡spring-task.xml:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframe

Maven專案啟動自動啟動執行SpringTask定時任務

1、引入Spring相關jar包 2、定時任務類 package taskJob; public class TaskDemo { public void test(){ System.out.println("現在是北京時間:XXX,開始觸發定時任務..."); } } 3

SpringBoot定時任務動態修改cron表示式改變執行週期

   一、場景引入        前不久做過一個根據下載指令定時下載檔案到伺服器的需求。輪詢下載的週期需要根據下載任務量的大小動態修改,下載任務密集的時候就週期縮小,下載任務少量時就擴大週期時間。java本身和第三方開源框架Spring共

2. Spring Boot 定時任務升級篇(動態修改cron引數)

【文章出自:http://412887952-qq-com.iteye.com/blog/2367537】   需求緣起:在釋出了《Spring Boot定時任務升級篇》之後得到不少反饋,其中有一個反饋就是如何動態修改cron引數呢?那麼我們一起看看具體怎麼實現,先看下

Spring+Quartz實現定時任務配置方法

detail 包含 範例 empty beans ref tail 可選 creat 1、Scheduler的配置 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&g

spring多個定時任務quartz配置

ram 至少 utf-8 list 表達 lse 第一個 span cron spring多個定時任務quartz配置 1 <?xml version=”1.0″ encoding=”UTF-8″?> 2 <beans xmlns=”http:/

一張圖讓你秒懂Spring @Scheduled定時任務的fixedRate,fixedDelay,cron執行差異

https://blog.csdn.net/applebomb/article/details/52400154   看字面意思容易理解,但是任務執行長度超過週期會怎樣呢? 不多說,直接上圖: 測試程式碼: import java.text.DateFormat; imp

Spring設定定時任務執行時間的規則說明

一、各域說明 欄位域 秒 分 時 日 月 星期(7為週六) 年(可選) 取值範圍 0-59 0-59 0-23 1-31 1-12或JAN–DEC 1-7或SUN–SAT 1970–

java.util.Timer、Quartz與Spring task定時任務的幾種實現方法

轉載:https://www.jb51.net/article/106445.htm 一.分類 從實現的技術上來分類,目前主要有三種技術(或者說有三種產品): 1.Java自帶的java.util.Timer類,這個類允許你排程一個java.util.TimerTask任務。使用這種方式

Spring定時任務@Scheduled,部署後執行載入兩次

最近公司讓做定時抓取新聞的一個定時,一切都部署好後,發現每次都載入了兩次。配置檔案都檢查了,也沒發現問題。 1.註解的配置 <!-- 啟用註解定時 --> <task:annotation-driven scheduler="mySchedul