最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Spring Batch框架job任務(wù)只跑一次的問題

 更新時(shí)間:2021年09月07日 15:13:39   作者:20190115  
這篇文章主要介紹了解決Spring Batch框架job任務(wù)只跑一次的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring Batch job任務(wù)只跑一次

在一次實(shí)際使用spring batch的過程中,在定時(shí)任務(wù)中,第一次執(zhí)行Job沒有出現(xiàn)問題,然后再次執(zhí)行時(shí)不會(huì)執(zhí)行job任務(wù);

出現(xiàn)原因

針對(duì)這種異常需要明確Job Instance的概念,Job Instance 是由Job的名稱和執(zhí)行該job的參數(shù)組成的,當(dāng)執(zhí)行Job時(shí),會(huì)由于參數(shù)相同,會(huì)認(rèn)為是同一個(gè)Job實(shí)例,如果該Job已經(jīng)執(zhí)行過,就會(huì)報(bào)出異常。判斷Job是否執(zhí)行過的狀態(tài)是保存到Job Repository中的。

解決方法

為了使執(zhí)行參數(shù)不同,可以在參數(shù)中添加一個(gè)時(shí)間戳

 JobParametersBuilder builder = new JobParametersBuilder();      
                       builder.addDate("date", new Date());

job的啟動(dòng),停止,放棄

1、啟動(dòng)一個(gè)job

運(yùn)行一個(gè)批處理任務(wù)至少有兩點(diǎn)要求:一個(gè) JobLauncher 和一個(gè)用來運(yùn)行的 job 。它們都包含了相同或是不同的 context 。舉例來說,從命令行來啟動(dòng)job,會(huì)為每一個(gè)job初始化一個(gè)JVM,因此每個(gè)job會(huì)有一個(gè)自己的 JobLauncher;從web容器的HttpRequest來啟動(dòng)job,一般只是用一個(gè) JobLauncher 來異步啟動(dòng)job,http請(qǐng)求會(huì)調(diào)用這個(gè) JobLauncher 來啟動(dòng)它們需要的job。

通過web啟動(dòng)job的例子:

@Controller
public class JobLauncherController {
    @Autowired
    JobLauncher jobLauncher;
    @Autowired
    Job job;
    @RequestMapping("/jobLauncher.html")
    public void handle() throws Exception{
      jobLauncher.run(job, new JobParameters());
    }
}

2、停止一個(gè)job

關(guān)閉不是立即發(fā)生的,因?yàn)闆]有辦法將一個(gè)任務(wù)立刻強(qiáng)制停掉,尤其是當(dāng)任務(wù)進(jìn)行到開發(fā)人員自己的代碼段時(shí),框架在此刻是無能為力的,比如某個(gè)業(yè)務(wù)邏輯處理。而一旦控制權(quán)還給了框架,它會(huì)立刻設(shè)置當(dāng)前 StepExecution 為 BachStatus.STOPPED ,意為停止,然后保存,最后在完成前對(duì)JobExecution進(jìn)行相同的操作。

Set<Long> executions = jobOperator.getRunningExecutions("sampleJob");
jobOperator.stop(executions.iterator().next());

或者在配置文件中實(shí)現(xiàn):

它能夠讓job進(jìn)行短暫的停留,以便操作員有時(shí)間進(jìn)行其他的操作,stop元素必須配置restart屬性,當(dāng)該job重新啟動(dòng)的時(shí)候,需要手動(dòng)觸發(fā),執(zhí)行step2。

<step id="step1" parent="s1">
    <stop on="COMPLETED" restart="step2"/>
</step>
<step id="step2" parent="s2"/>

3、放棄一個(gè)job

一個(gè)job的執(zhí)行過程當(dāng)執(zhí)行到FAILED狀態(tài)之后,如果它是可重啟的,它將會(huì)被重啟。如果任務(wù)的執(zhí)行過程狀態(tài)是ABANDONED,那么框架就不會(huì)重啟它。ABANDONED狀態(tài)也適用于執(zhí)行步驟,使得它們可以被跳過,即便是在一個(gè)可重啟的任務(wù)執(zhí)行之中:如果任務(wù)執(zhí)行過程中碰到在上一次執(zhí)行失敗后標(biāo)記為ABANDONED的步驟,將會(huì)跳過該步驟直接到下一步(這是由任務(wù)流定義和執(zhí)行步驟的退出碼決定的)。

如果當(dāng)前的系統(tǒng)進(jìn)程死掉了(“kill -9”或系統(tǒng)錯(cuò)誤),job自然也不會(huì)運(yùn)行,但JobRepository是無法偵測(cè)到這個(gè)錯(cuò)誤的,因?yàn)檫M(jìn)程死掉之前沒有對(duì)它進(jìn)行任何通知。你必須手動(dòng)的告訴它,你知道任務(wù)已經(jīng)失敗了還是說考慮放棄這個(gè)任務(wù)(設(shè)置它的狀態(tài)為FAILED或ABANDONED)-這是業(yè)務(wù)邏輯層的事情,無法做到自動(dòng)決策。

只有在不可重啟的任務(wù)中才需要設(shè)置為FAILED狀態(tài),或者你知道重啟后數(shù)據(jù)還是有效的。Spring Batch Admin中有一系列工具JobService,用以取消正在進(jìn)行執(zhí)行的任務(wù)。

4、失敗一個(gè)job

失敗的job是可以重新啟動(dòng)的,因?yàn)樗臓顟B(tài)是FAILED,如果step2失敗,則返回一個(gè)EARLY TERMINATION的返回碼,step3也就不會(huì)執(zhí)行。否則繼續(xù)執(zhí)行step3

<step id="step1" parent="s1" next="step2">
<step id="step2" parent="s2">
    <fail on="FAILED" exit-code="EARLY TERMINATION"/>
    <next on="*" to="step3"/>
</step>
<step id="step3" parent="s3">

5、結(jié)束一個(gè)job

已經(jīng)結(jié)束的job是不能重新啟動(dòng)的,因?yàn)樗臓顟B(tài)是COMPLETED。如果step2失敗了,則step3就不執(zhí)行了,該job也就COMPLETED,結(jié)束了。如果step2成功了,則繼續(xù)往下執(zhí)行step3。

<step id="step1" parent="s1" next="step2">
<step id="step2" parent="s2">
    <end on="FAILED"/>
    <next on="*" to="step3"/>
</step>
<step id="step3" parent="s3">

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Elasticsearch中store field與non-store field的區(qū)別說明

    Elasticsearch中store field與non-store field的區(qū)別說明

    這篇文章主要介紹了Elasticsearch中store field與non-store field的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值方式

    使用JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值方式

    這篇文章主要介紹了使用JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java Springboot websocket使用案例詳解

    Java Springboot websocket使用案例詳解

    這篇文章主要介紹了Java Springboot websocket使用案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Spring Cloud Zuul自定義過濾器的實(shí)現(xiàn)

    Spring Cloud Zuul自定義過濾器的實(shí)現(xiàn)

    這篇文章主要介紹了自定義Spring Cloud Zuul過濾器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java swing實(shí)現(xiàn)簡(jiǎn)單計(jì)算器界面

    java swing實(shí)現(xiàn)簡(jiǎn)單計(jì)算器界面

    這篇文章主要為大家詳細(xì)介紹了java swing實(shí)現(xiàn)簡(jiǎn)單計(jì)算器界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 深入淺析Java注解框架

    深入淺析Java注解框架

    這篇文章主要介紹了深入淺析Java注解框架的相關(guān)資料,介紹的非常詳細(xì),具有參考價(jià)值,需要的朋友參考下吧
    2016-05-05
  • Java用jxl讀取excel并保存到數(shù)據(jù)庫的方法

    Java用jxl讀取excel并保存到數(shù)據(jù)庫的方法

    這篇文章主要為大家詳細(xì)介紹了Java用jxl讀取excel并保存到數(shù)據(jù)庫的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • springboot swagger 接口文檔分組展示功能實(shí)現(xiàn)

    springboot swagger 接口文檔分組展示功能實(shí)現(xiàn)

    這篇文章主要介紹了springboot swagger 接口文檔分組展示功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot默認(rèn)使用HikariDataSource數(shù)據(jù)源方式

    SpringBoot默認(rèn)使用HikariDataSource數(shù)據(jù)源方式

    這篇文章主要介紹了SpringBoot默認(rèn)使用HikariDataSource數(shù)據(jù)源方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論

山阳县| 沽源县| 福海县| 璧山县| 莫力| 那坡县| 大化| 琼海市| 阿勒泰市| 磴口县| 罗田县| 特克斯县| 泾川县| 山东| 广西| 资中县| 宁强县| 吉首市| 阳原县| 富蕴县| 罗定市| 山阳县| 甘谷县| 柳江县| 博野县| 柏乡县| 无极县| 海原县| 当雄县| 卢氏县| 长泰县| 高邑县| 潼关县| 抚州市| 景洪市| 鹤庆县| 仲巴县| 汝城县| 高邮市| 乐至县| 科技|