spring boot定時任務中新建執行緒如何做到可控終止
最近遇到這樣的需求,要求是定時的執行任務,但是這些任務能夠根據控制及時的停止。
首先定時任務可以直接使用spring中的schedule註解方式實現。那麼如何控制已經啟動的任務及時停止呢?
下面說一下思路。首先利用spring的schedule註解方式進行定時任務的執行。然後,在每個定時任務中使用新建執行緒的方式進行任務的執行。在新建執行緒的run方法中通過檢測開關的狀態,如果開關開啟,則丟擲interruptException然後通過catch捕獲結束執行緒的執行即可。
下面是詳細的實現。
1、首先在spring boot中新增定時任務。
新增@EnableScheduling註解。
2、新增定時任務
package com.example.demo.task; import com.example.demo.controller.TaskHelperController; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; @Component public class TestTask { @Scheduled(cron = "0/5 * * * * ?") public void test() { Thread thread = new Thread(new Exetask()); thread.start(); System.out.println(thread.getName() + "===============begin" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())); } class Exetask implements Runnable { @Override public void run() { for (int i = 0; i < 100; i++) { try { if (TaskHelperController.stopFlag) { throw new InterruptedException(); } Thread.sleep(3000); System.out.println(Thread.currentThread().getName() + " " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())); } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName() + " stop!!!"); break; } } } } }
3、對應的控制邏輯在另一個介面中
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/taskHelper") public class TaskHelperController { public static boolean stopFlag = false; @RequestMapping("/change") public String test(boolean flag) { TaskHelperController.stopFlag = flag; return "ok"; } }
4、這裡的開關標誌可以儲存在資料庫,快取等地方。
相關推薦
spring boot定時任務中新建執行緒如何做到可控終止
最近遇到這樣的需求,要求是定時的執行任務,但是這些任務能夠根據控制及時的停止。 首先定時任務可以直接使用spring中的schedule註解方式實現。那麼如何控制已經啟動的任務及時停止呢? 下面說一下思路。首先利用spring的schedule註解方式進行定時任務的執
Spring Boot介面畫管理Quartz定時任務及多執行緒併發執行定時任務
工程程式碼示例 : Spring Boot整合持久化Quartz定時任務管理和介面展示 工程地址 : https://github.com/tjfy1992/SpringBootQuartz 執行方法 Spring Boot工程已經集成了伺
Spring Boot 定時任務單執行緒和多執行緒
Spring Boot 的定時任務: 第一種:把引數配置到.properties檔案中: 程式碼: package com.accord.task; import java.text.SimpleDateFormat; import java.util.Date; im
spring boot-高階話題之 多執行緒、@EnableScheduling開啟計劃任務的支援(2)
spring通過任務執行器(TaskExecutor)來實現多執行緒和併發程式設計。 ThreadPoolTaskExecutor可實現一個基於執行緒池的TaskExecutor。 實際開發中任務一般是非阻礙的,即非同步的,通過@EnableAsync開啟對非同步任務的支援
Spring-boot使用Quartz實現多執行緒排程任務
背景:專案的背景還原一下,專案的App需要去呼叫第三方的介面獲取資料。我們要建立很多個任務(Task),每個Task都要去獲取資料,但是每個Task的執行週期和頻率不一樣。所以使用多執行緒來解決。為每一個Task啟動一個執行緒。然後迴圈不停的去獲取資料。剛開始的時候打算自
spring boot.定時任務問題記錄(TaskScheduler/ScheduledExecutorService異常)
context 人員 name bst pool .config implement per not 一、背景 spring boot的定時任務非常簡單,只需要在啟動類中加上@EnableScheduling註解,然後在對應的方法上配置@Scheduled就可以了,系統會自
spring boot 定時任務基於zookeeper的分布式鎖實現
刪除 etl .org stack pub 具體實現 spec 分享 -i 基於ZooKeeper分布式鎖的流程 在zookeeper指定節點(locks)下創建臨時順序節點node_n 獲取locks下所有子節點children 對子節點按節點自增序號從小到大排序
Spring Boot定時任務註解實現
在部落格專案開發過程中,需要一個任務每間隔一定的時間執行一次。譬如推送訊息,檢查文章訪問情況,清除一定時間前訪問者的id(用於控制文章閱讀數量隨重新整理而一直增長)。用Spring Boot定時執行任務。 首先在啟動類上加入&n
spring boot 定時任務(@EnableScheduling)
ScheduleConfig.java @Configuration public class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks
spring單例模式中,執行緒安全問題
@RequestMapping(value = "getPsdbData", method = RequestMethod.POST) public Map<String, Object> getPsdbData(String key,HttpServletRequest reques
spring boot定時任務
1.一般的定時任務Timer,Quartz 2.spring boot更加便捷的註解方式啟動定時任務 在啟動類新增 @EnableScheduling 其次新建一個class類 package com.example.demo.test1; import org.
spring boot 定時任務
java使用定時任務無非就那幾種,timer,執行緒池排程,quartz,xxl-job,我就知道這幾種,timer可以基本拋棄,執行緒池排程不太熟悉,xxl-job是分散式的任務排程開源專案,quartz跟spring整合是我們能最常用的,所以在使用springboot之前
Core表示式詳解【spring-boot定時任務使用內容】
Cron表示式是一個字串,字串以5或6個空格隔開,分為6或7個域,每一個域代表一個含義,Cron有如下兩種語法格式: Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours
Spring Boot定時任務之傳參
在Spring Boot中我們可以使用@Scheduled註解實現定時任務 import java.text.SimpleDateFormat; import java.util.Date; i
2. Spring Boot 定時任務升級篇(動態修改cron引數)
【文章出自:http://412887952-qq-com.iteye.com/blog/2367537】 需求緣起:在釋出了《Spring Boot定時任務升級篇》之後得到不少反饋,其中有一個反饋就是如何動態修改cron引數呢?那麼我們一起看看具體怎麼實現,先看下
spring quartz 定時任務同時間執行2次的問題
運用spring quartz 執行定時任務的時候 同時間 遇到的 執行2次的問題。 任務執行的時候 , 發現 log.info 日誌 輸出了 2次 ,當時沒有 找到 哪裡錯了, 後面發現啟動專案的時候
Springboot 2.0.* 及低版本定時任務@Scheduled多執行緒配置
1. 首先在springboot啟動類上新增 @EnableScheduling 註解。 import org.spr
Spring Boot (十一): Spring Boot 定時任務
在實際的專案開發工作中,我們經常會遇到需要做一些定時任務的工作,那麼,在 Spring Boot 中是如何實現的呢? 1. 新增依賴 在 pom.xml 檔案中只需引入 spring-boot-starter 的依賴即可: 程式碼清單:spring-boot-scheduler/pom.xml *** &
Spring Boot 定時任務 @Scheduled
專案開發中經常需要執行一些定時任務,比如在每天凌晨,需要從 implala 資料庫拉取產品功能活躍資料,分析處理後存入到 MySQL 資料庫中。類似這樣的需求還有許多,那麼怎麼去實現定時任務呢,有以下幾種實現方式。 Java 定時任務的幾種實現方式 基於 java.util.Timer 定時器,實現類似鬧鐘
SpringBoot系列:Spring Boot定時任務Spring Schedule
Spring Schedule是Spring提供的定時任務框架,相較於Quartz,Schedule更加簡單易用,在中小型應用中,對於大部分需求,Schedule都可以勝任。 一、Spring Schedule使用演示 在SpringBoot使用Spring Schedule非常簡單,因為SpringBoot