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

spring?batch線上異常定位記錄

 更新時(shí)間:2022年03月01日 16:16:27   作者:kl  
這篇文章主要為大家介紹了spring?batch線上異常定位記錄及異常解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

前言

最近線上spring batch的一個(gè)問(wèn)題圍繞博主近兩周時(shí)間,甚是擾神。具體現(xiàn)象為,spring batch執(zhí)行中莫名其妙線程就卡住了,不往下走了。下面會(huì)詳細(xì)描述整個(gè)問(wèn)題的排查過(guò)程

環(huán)境說(shuō)明

spring batch分區(qū)環(huán)境,共6個(gè)分片,兩臺(tái)實(shí)例,分別6個(gè)線程處理,由xxljob任務(wù)調(diào)度觸發(fā)日切job,配置由apollo管理。

排查過(guò)程

1.xxljob長(zhǎng)連接導(dǎo)致

why?因?yàn)槲覀冇许?xiàng)目是老項(xiàng)目,任務(wù)調(diào)度使用的quartz,原來(lái)的批處理沒(méi)啥毛病。

然后修改了dayEndjob的觸發(fā)執(zhí)行改為異步,發(fā)現(xiàn)問(wèn)題依舊。

2.定位JpaPagingItemReader的問(wèn)題

盯著BATCH_STEP_EXECUTION看了很久,發(fā)現(xiàn)其他的step_execution都是啟動(dòng)中的狀態(tài),其中兩個(gè)step_execution是讀取中,并且和其他step_execution明顯區(qū)別version版本一直在增加,初步判斷有線程一直在修改.但是日志一點(diǎn)動(dòng)靜都沒(méi)有,如果是線程阻塞了,肯定也不存在線程修改數(shù)據(jù)庫(kù)數(shù)據(jù)。然后在apollo把日志級(jí)別調(diào)整成DEBUG級(jí)別(spring boot線上日志級(jí)別動(dòng)態(tài)調(diào)整),發(fā)現(xiàn)輸出大量的如下日志信息

java.lang.IllegalStateException: Transaction already active
        at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:42)
        at org.springframework.batch.item.database.JpaPagingItemReader.doReadPage(JpaPagingItemReader.java:197)
        at org.springframework.batch.item.database.AbstractPagingItemReader.doRead(AbstractPagingItemReader.java:108)
        at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.read(AbstractItemCountingItemStreamItemReader.java:88)
        at org.springframework.batch.item.support.SynchronizedItemStreamReader.read(SynchronizedItemStreamReader.java:55)
        at sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
        at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
        at com.sun.proxy.$Proxy126.read(Unknown Source)
        at org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:91)
        at org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:87)
        at org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInIteration(SimpleChunkProvider.java:116)
        at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:374)
        at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
        at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144)
        at org.springframework.batch.core.step.item.SimpleChunkProvider.provide(SimpleChunkProvider.java:110)
        at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:69)
        at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406)
        at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:272)
        at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:81)
        at org.springframework.batch.repeat.support.TaskExecutorRepeatTemplate$ExecutingRunnable.run(TaskExecutorRepeatTemplate.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

3.確定JpaPagingItemReader的問(wèn)題

因?yàn)轫?xiàng)目使用了jpa。故而數(shù)據(jù)讀取器用用了JpaPagingItemReader,從異常信息找到JpaPagingItemReader文件后發(fā)現(xiàn),JpaPagingItemReader根據(jù)配置的transacted=true,編程式的開啟了事務(wù),而提交事務(wù)和回滾事務(wù)并沒(méi)有作try,catch處理,而一旦拋出了如上事務(wù)異常,因?yàn)镕aultTolerantChunkProvider 讀取數(shù)據(jù)實(shí)現(xiàn)如下

就會(huì)進(jìn)入一個(gè)一直拋異常的死循環(huán),至此所有問(wèn)題都清晰明了了。

解決問(wèn)題

參照J(rèn)paPagingItemReader既有的實(shí)現(xiàn),自定義一個(gè)CustomJpaPagingItemReader閱讀器,去掉事務(wù)部分代碼,或者實(shí)例化JpaPagingItemReader的時(shí)候設(shè)置transacted為false。這個(gè)參數(shù)主要用途我猜測(cè)是為了讓用戶自己選擇查詢出來(lái)的對(duì)象是否為entityManager管理的游離態(tài)。我們項(xiàng)目用不著,就直接去掉事務(wù)部分了。一般如果查詢沒(méi)問(wèn)題,不會(huì)有如上情況,這個(gè)bug也是隱藏的深,死循環(huán)后info日志級(jí)別下沒(méi)有任何輸出,就和線程阻塞似的。解決這個(gè)問(wèn)題后感覺(jué)神清氣爽啊

以上就是spring batch線上異常定位記錄的詳細(xì)內(nèi)容,更多關(guān)于spring batch線上異常定位的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • feign之間傳遞oauth2?token的問(wèn)題及解決方案

    feign之間傳遞oauth2?token的問(wèn)題及解決方案

    這篇文章主要介紹了feign之間傳遞oauth2?token的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring中的MultipartFile詳解

    Spring中的MultipartFile詳解

    這篇文章主要介紹了Spring中的MultipartFile詳解,隨著Spring框架的崛起,使用Spring框架中的MultipartFile來(lái)處理文件也是件很方便的事了,今天就為大家?guī)?lái)剖析MultipartFile的神秘面紗,需要的朋友可以參考下
    2024-01-01
  • 詳解Spring Boot 自定義PropertySourceLoader

    詳解Spring Boot 自定義PropertySourceLoader

    這篇文章主要介紹了詳解Spring Boot 自定義PropertySourceLoader,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • zookeeper的Leader選舉機(jī)制源碼解析

    zookeeper的Leader選舉機(jī)制源碼解析

    這篇文章主要為大家介紹了zookeeper的Leader選舉源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases

    Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • myBatis組件教程之緩存的實(shí)現(xiàn)與使用

    myBatis組件教程之緩存的實(shí)現(xiàn)與使用

    這篇文章主要給大家介紹了關(guān)于myBatis組件教程之緩存的實(shí)現(xiàn)與使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • IDEA不識(shí)別Java文件:文件變橙色&顯示后綴名.java的解決

    IDEA不識(shí)別Java文件:文件變橙色&顯示后綴名.java的解決

    這篇文章主要介紹了IDEA不識(shí)別Java文件:文件變橙色&顯示后綴名.java的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解Spring MVC的攔截器與異常處理機(jī)制

    詳解Spring MVC的攔截器與異常處理機(jī)制

    這篇文章主要為大家詳細(xì)介紹了Spring MVC的攔截器與異常處理機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • spring boot + mybatis如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離

    spring boot + mybatis如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離

    這篇文章主要給大家介紹了關(guān)于spring boot + mybatis如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法

    Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法

    最近做項(xiàng)目遇到這樣的應(yīng)用場(chǎng)景,項(xiàng)目需要同時(shí)連接兩個(gè)不同的數(shù)據(jù)庫(kù)A, B,并且它們都為主從架構(gòu),一臺(tái)寫庫(kù),多臺(tái)讀庫(kù)。下面小編給大家?guī)?lái)了Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法,需要的朋友參考下吧
    2018-01-01

最新評(píng)論

新乡县| 达日县| 应城市| 泌阳县| 桂林市| 晋城| 合水县| 盈江县| 天台县| 通海县| 淮安市| 西盟| 岳西县| 天气| 平阴县| 萝北县| 建水县| 肥乡县| 章丘市| 都江堰市| 遂昌县| 平乐县| 天祝| 怀安县| 西丰县| 安吉县| 龙岩市| 海原县| 霍城县| 祁连县| 邯郸市| 枣强县| 双江| 阜新| 东港市| 山西省| 新竹县| 黔东| 女性| 布尔津县| 陆良县|