亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springBoot項(xiàng)目集成quartz開發(fā)定時(shí)任務(wù)案例及注意事項(xiàng)

 更新時(shí)間:2022年06月17日 10:18:38   作者:舉杯慶祝  
這篇文章主要介紹了springBoot項(xiàng)目集成quartz開發(fā)定時(shí)任務(wù)案例及注意事項(xiàng),這些功能的主要接口(API)是Scheduler接口。它提供了簡單的操作,例如:將任務(wù)納入日程或者從日程中取消,開始/停止/暫停日程進(jìn)度,需要的朋友可以參考下

quartz下載、安裝

Quartz是完全由java開發(fā)的一個(gè)開源的任務(wù)日程管理系統(tǒng),任務(wù)進(jìn)度管理器就是一個(gè)在預(yù)先確定的時(shí)間到達(dá)時(shí),負(fù)責(zé)執(zhí)行(或者通知)一段程序或功能的系統(tǒng),即定時(shí)執(zhí)行某個(gè)任務(wù)。
Quartz用一個(gè)小Java庫發(fā)布文件(.jar文件),這個(gè)庫文件包含了所有Quartz核心功能。這些功能的主要接口(API)是Scheduler接口。它提供了簡單的操作,例如:將任務(wù)納入日程或者從日程中取消,開始/停止/暫停日程進(jìn)度。

quartz服務(wù)涉及的11張表

上圖是quartz服務(wù)涉及的11張表, 下面這個(gè)圖是maven中引入的quartz依賴包

maven中引入quartz依賴

Quartz的jar包下載、SpringBoot項(xiàng)目整合Quartz安裝及具體的使用方法本站已經(jīng)有很多,但是還是建議參考W3CSchool的官方文檔 Quartz快速入門指南

官方文檔地址: https://www.w3cschool.cn/quartz_doc/quartz_doc-2put2clm.html

實(shí)戰(zhàn)案例

假如我開發(fā)環(huán)境已經(jīng)配置好,我們只關(guān)注具體業(yè)務(wù)實(shí)現(xiàn)。實(shí)際上做項(xiàng)目的過程中也很少會(huì)讓開發(fā)自己去集成組件,通常都是開發(fā)環(huán)境已經(jīng)配置好了,如果需要配置的話還是像上面說的,看官方文檔吧。
現(xiàn)在有個(gè)需求是每天凌晨把某個(gè)登記表A的信息篩選后刷到B表中,先貼上代碼:

//RefreshTableJob.java的代碼
@Component("RefreshTableJob")
public class RefreshTableJob {
    private static final Logger logger = LoggerFactory.getLogger(RefreshIdleAssetJob.class);
    public void PullData(){
        try{
            SpringUtils.getBean(IassetService.class).initIdleAssetList();
        } catch (RestClientResponseException e) {
            logger.error("數(shù)據(jù)同步失敗,error:"+e.getMessage());
        }catch (Exception e) {
            e.printStackTrace();
            logger.error("數(shù)據(jù)同步失敗,error:"+e.getMessage());
        }
    }
}
//assetServiceImpl.java的代碼 實(shí)現(xiàn)了IassetService接口
@Service
public class IdleAssetServiceImpl implements IaAssetService{
@Resource
private IdleAssetMapper idleAssetMapper;
/**
 * 拉取增量閑置資產(chǎn)數(shù)據(jù)
 */
@Override
@Transactional
public void initIdleAssetList(){
    // 處理閑置數(shù)據(jù)
    List<HashMap> initList = idleAssetMapper.selectIdleList(null);
    while (initList != null && initList.size() > 0){
        for(HashMap data : initList){
            HashMap paramMap = new HashMap();
            String uuid = UUID.randomUUID().toString().trim();
            paramMap.put("UPDATETIME", DateUtils.getNowDate());
            paramMap.put("UPDATEUSER", "");
            paramMap.put("STATUS", data.get("A_STATUS"));
            // 。。。。這里省略了很多字段
            paramMap.put("USAGESECRET", data.get("A_USAGESECRET"));
            paramMap.put("BELONGENTITYID", data.get("A_ID"));
            idleAssetMapper.saveIdleAsset(paramMap);
        }
        initList = idleAssetMapper.selectEquipIdleList(null);
    }
    logger.info("設(shè)備儀器表閑置資產(chǎn)數(shù)據(jù)獲取完成");

RefreshTableJob.java就是定時(shí)任務(wù)執(zhí)行的入口,它的主要邏輯是調(diào)用service實(shí)現(xiàn)類中的initIdleAssetList方法,調(diào)用Mybatis的mapper文件查詢數(shù)據(jù)庫表A的增量數(shù)據(jù),循環(huán)處理后刷入B表,配置的cron表達(dá)式是 0 0 2 1/1 * ? * (每天兩天執(zhí)行一次)。

常見問題及解決方案

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.bjsasc.openshare.idleasset.service.IassetService' available
原因:定時(shí)任務(wù)類RefreshTableJob中找不到IassetService這個(gè)類
解決方法:
在系統(tǒng)的啟動(dòng)類的main方法中加上這么一行配置信息,僅本地調(diào)試的時(shí)候加哦,這行代碼不用提交,生產(chǎn)環(huán)境沒有這個(gè)問題,不知道為啥子
System.setProperty(“spring.devtools.restart.enabled”, “false”);

在這里插入圖片描述

java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request. 直接原因:我在插入B表的時(shí)候看到有個(gè)創(chuàng)建人字段,想獲取系統(tǒng)中的當(dāng)前登錄用戶信息,結(jié)果獲取不到request相關(guān)對(duì)象

在這里插入圖片描述

相信查過資料的朋友看到了網(wǎng)上說的設(shè)置request子線程共享或者重新實(shí)現(xiàn)RequestAttributes接口的方式了,這倆方案只是屏蔽報(bào)錯(cuò)的,如果只是想屏蔽報(bào)錯(cuò),那直接刪掉出錯(cuò)位置的代碼或者寫個(gè)自定義接口實(shí)現(xiàn)類判斷一下requestAttributes 為空時(shí)new一個(gè)就完了。

那怎么獲取當(dāng)前登錄用戶呢?
答案是獲取不到,定時(shí)任務(wù)可以在不登陸系統(tǒng)的情況下運(yùn)行,對(duì)于在controller層調(diào)用service方法(WEB訪問方式)中使用RequestContextHolder或者WebApplicationContext對(duì)象獲取上下文的情況完全沒有問題。但是除了controller層外,調(diào)度任務(wù)等也可能調(diào)用service層的方法(非web方式根本不存在request對(duì)象),這種情況下不能使用上下文對(duì)象獲取其中的用戶信息。
如果你非要娶,可以提前把用戶登錄信息存到redis或者其他渠道,看起來有點(diǎn)麻煩,真有這樣的需求嗎,showme探討一下。

到此這篇關(guān)于springBoot項(xiàng)目集成quartz開發(fā)定時(shí)任務(wù)案例及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)springBoot集成quartz開發(fā)定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程利用socket多線程訪問服務(wù)器文件代碼示例

    Java編程利用socket多線程訪問服務(wù)器文件代碼示例

    這篇文章主要介紹了Java編程利用socket多線程訪問服務(wù)器文件代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Spring?@Transactional事務(wù)失效的原因分析

    Spring?@Transactional事務(wù)失效的原因分析

    一個(gè)程序中不可能沒有事務(wù),Spring中,事務(wù)的實(shí)現(xiàn)方式分為兩種:編程式事務(wù)和聲明式事務(wù)。日常項(xiàng)目中,我們都會(huì)使用聲明式事務(wù)?@Transactional來實(shí)現(xiàn)事務(wù),本文來和大家聊聊什么情況會(huì)導(dǎo)致@Transactional事務(wù)失效
    2022-09-09
  • springboot 自定義LocaleResolver實(shí)現(xiàn)切換語言

    springboot 自定義LocaleResolver實(shí)現(xiàn)切換語言

    我們?cè)谧鲰?xiàng)目的時(shí)候,往往有很多項(xiàng)目需要根據(jù)用戶的需要來切換不同的語言,使用國際化就可以輕松解決。這篇文章主要介紹了springboot 自定義LocaleResolver切換語言,需要的朋友可以參考下
    2019-10-10
  • Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析

    Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析

    這篇文章主要介紹了Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析,Spring事務(wù)管理基于底層數(shù)據(jù)庫本身的事務(wù)處理機(jī)制,數(shù)據(jù)庫事務(wù)的基礎(chǔ),是掌握Spring事務(wù)管理的基礎(chǔ),這篇總結(jié)下Spring事務(wù),需要的朋友可以參考下
    2024-01-01
  • Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json)

    Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json)

    本文主要介紹了Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java私有構(gòu)造函數(shù)作用原理解析

    Java私有構(gòu)造函數(shù)作用原理解析

    這篇文章主要介紹了Java私有構(gòu)造函數(shù)作用原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot依賴管理的源碼解析

    SpringBoot依賴管理的源碼解析

    這篇文章主要介紹了SpringBoot依賴管理的源碼解析,maven提供了一套依賴管理機(jī)制,通過在pom.xml定義坐標(biāo),通過坐標(biāo)從互聯(lián)網(wǎng)的中央倉庫下載依賴的構(gòu)件(jar包),規(guī)范去管理依賴所有構(gòu)件,這就叫依賴管理,需要的朋友可以參考下
    2023-04-04
  • Java二維數(shù)組計(jì)算集合總結(jié)

    Java二維數(shù)組計(jì)算集合總結(jié)

    本篇文章給大家整理了關(guān)于Java二維數(shù)組計(jì)算集合的內(nèi)容總結(jié),有需要的讀者們可以參考下。
    2018-02-02
  • SpringBoot YAML語法基礎(chǔ)詳細(xì)整理

    SpringBoot YAML語法基礎(chǔ)詳細(xì)整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Java分別利用深度優(yōu)先和廣度優(yōu)先求解迷宮路徑

    Java分別利用深度優(yōu)先和廣度優(yōu)先求解迷宮路徑

    這篇文章主要為大家詳細(xì)介紹了Java如何利用深度優(yōu)先的非遞歸遍歷方法和廣度優(yōu)先的遍歷方法實(shí)現(xiàn)求解迷宮路徑,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-08-08

最新評(píng)論