国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉

這篇具有很好參考價(jià)值的文章主要介紹了Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

ProcessRuntimeEventListener

activiti7中,提供了ProcessRuntimeEventListener監(jiān)聽器,用于監(jiān)聽流程實(shí)例的結(jié)束事件

/**
 * 流程完成監(jiān)聽器
 */
@Slf4j
@Component
public class ProcessCompleteListener implements ProcessRuntimeEventListener<ProcessCompletedEvent> {

    @Override
    public void onEvent(ProcessCompletedEvent event) {
        // ...處理自己的業(yè)務(wù)邏輯
	
		// 這里寫一段拋出異常的測(cè)試代碼
		int a = 1 / 0;
    }
}

上述代碼中,由于1/0會(huì)拋出運(yùn)行時(shí)異常,理論上來說應(yīng)該被我們的全局異常所捕獲

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 通用未知異常
     */
    @ExceptionHandler(Throwable.class)
    @ResponseStatus(HttpStatus.OK)
    public ResultEntity<?> error(Exception e) {
        return ResultEntity.fail(ResultEnum.SERVER_ERROR, "系統(tǒng)錯(cuò)誤,請(qǐng)聯(lián)系管理員!");
    }

}

實(shí)際情況是無法捕獲

解決思路

既然異常沒有被一層一層的拋出去直到被全局異常捕獲,那說明調(diào)用ProcessCompleteListener.onEvent()的某個(gè)地方使用try catch將異常捕獲了該異常并沒有繼續(xù)向上拋出,隨著這個(gè)思路,我們將斷點(diǎn)打在1/0這行代碼上面

Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端
然后重新運(yùn)行代碼,讓代碼執(zhí)行到斷點(diǎn)位置
Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端

然后在左側(cè)的方法調(diào)用棧中,一個(gè)一個(gè)找,是哪個(gè)地方調(diào)用了onEvent并且進(jìn)行了try catch異常捕捉
Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端
找到使用了try catch的實(shí)際的調(diào)用處,如圖所示
catch中通過判斷l(xiāng)istener的isFailOnException()來控制是否拋出異常

由斷點(diǎn)可以看出,listener對(duì)象是ProcessCompletedListenerDelegate
Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端
Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端
由此可見isFailOnException總是返回false,所以一直不會(huì)將異常拋出

解決辦法

我們可以創(chuàng)建一個(gè)CustomProcessCompletedListenerDelegate自定義子類繼承該類,然后重新isFailOnException方法,但是問題是如何將spring環(huán)境中的ProcessCompletedListenerDelegate替換成我們的自定義子類
那么我們就看ProcessCompletedListenerDelegate類是什么時(shí)候創(chuàng)建出來的,在創(chuàng)建時(shí),替換成我們自定義的類

有2個(gè)辦法:

  1. ProcessCompletedListenerDelegate類的構(gòu)造器上面打斷點(diǎn)(小提示:如果遇到想給構(gòu)造器打斷點(diǎn),但是沒有寫構(gòu)造器的情況下,就在類名所在行打斷點(diǎn)),然后重啟項(xiàng)目,等執(zhí)行到斷點(diǎn)行的時(shí)候,再次查看方法調(diào)用棧,找到什么時(shí)候創(chuàng)建的該類
  2. 直接alt + F7,或者右鍵類名點(diǎn)Find Usages查找使用地方

Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端

取巧一點(diǎn)的方法是先用方式2,看看使用的地方多不多,如果很多無法確定具體使用的地方,那么在用方法1

這里可以直接使用方法2,找到調(diào)用處
Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端

ProcessRunTimeAutoConfiguration的369行在使用,直接點(diǎn)進(jìn)去

Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉,spring,java,后端

這就好辦了,看到了@ConditionOnMissingBean,那么我們可以直接自己注入CustomProcessCompletedListenerDelegate到Spring中來管理就可以文章來源地址http://www.zghlxwxcb.cn/news/detail-740629.html

解決代碼如下

自定義監(jiān)聽器委托類CustomProcessCompletedListenerDelegate

/**
 * 繼承ProcessCompletedListenerDelegate,重寫isFailOnException以達(dá)目的
 */
public class CustomProcessCompletedListenerDelegate extends ProcessCompletedListenerDelegate {
    public CustomProcessCompletedListenerDelegate(List<ProcessRuntimeEventListener<ProcessCompletedEvent>> processRuntimeEventListeners, ToProcessCompletedConverter processCompletedConverter) {
        super(processRuntimeEventListeners, processCompletedConverter);
    }

    @Override
    public boolean isFailOnException() {
        return true;
    }
}

注入Spring,我這里使用的是SpringBoot

@Configuration
// 如果是spi方式注入,則添加如下這行控制順序
// @AutoConfigureBefore(ProcessRuntimeAutoConfiguration.class)
public class ProcessCompleteListenerConfig {

    @Bean("registerProcessCompletedListenerDelegate")
    public InitializingBean registerProcessCompletedListenerDelegate(
            RuntimeService runtimeService,
            @Autowired(required = false) List<ProcessRuntimeEventListener<ProcessCompletedEvent>> eventListeners,
            ToProcessCompletedConverter converter) {
        return () -> runtimeService.addEventListener(new CustomProcessCompletedListenerDelegate(getInitializedListeners(eventListeners),
                        converter),
                ActivitiEventType.PROCESS_COMPLETED);
    }

    private <T> List<T> getInitializedListeners(List<T> eventListeners) {
        return eventListeners != null ? eventListeners : Collections.emptyList();
    }


}

到了這里,關(guān)于Activiti7流程結(jié)束監(jiān)聽事件中,拋出的異常無法被spring全局異常捕捉的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【工作流Activiti7】3、Activiti7 回退與會(huì)簽

    【工作流Activiti7】3、Activiti7 回退與會(huì)簽

    1.? 回退(駁回) 回退的思路就是動(dòng)態(tài)更改節(jié)點(diǎn)的流向。先遇水搭橋,最后再過河拆橋。 具體操作如下: 取得當(dāng)前節(jié)點(diǎn)的信息 取得當(dāng)前節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)的信息 保存當(dāng)前節(jié)點(diǎn)的流向 新建流向,由當(dāng)前節(jié)點(diǎn)指向上一個(gè)節(jié)點(diǎn) 將當(dāng)前節(jié)點(diǎn)的流向設(shè)置為上面新建的流向 當(dāng)前節(jié)點(diǎn)完

    2023年04月20日
    瀏覽(24)
  • Activiti7(圖文并茂)

    Activiti7(圖文并茂)

    Activiti 是由 jBPM (BPM,Business Process Management 即業(yè)務(wù)流程管理) 的創(chuàng)建者 Tom Baeyens 離開 JBoss 之后建立的項(xiàng)目,構(gòu)建在開發(fā) jBPM 版本 1 到 4 時(shí)積累的多年經(jīng)驗(yàn)的基礎(chǔ)之上,旨在創(chuàng)建下一代的 BPM 解 決方案。 Activiti 作為一個(gè)開源的工作流引擎,它實(shí)現(xiàn)了BPMN 2.0規(guī)范,可以發(fā)布設(shè)計(jì)

    2024年02月06日
    瀏覽(90)
  • activiti7入門教程

    activiti7入門教程

    工作流概念 工作流是指業(yè)務(wù)過程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化。是對(duì)工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象、概括描述。 activiti介紹 activiti是一個(gè)工作流引擎,可以將業(yè)務(wù)系統(tǒng)中復(fù)雜的業(yè)務(wù)流程抽取出來,使用專門的建模語言BPMN進(jìn)行定義,業(yè)務(wù)流程按照

    2024年02月13日
    瀏覽(15)
  • 2023最新版本Activiti7系列-任務(wù)分配

    2023最新版本Activiti7系列-任務(wù)分配

    ??在指派 用戶任務(wù) 的審批人時(shí)。我們是直接指派的固定賬號(hào)。但是為了保證流程設(shè)計(jì)審批的靈活性。我們需要各種不同的分配方式,所以這節(jié)我們就詳細(xì)的來介紹先在Activiti7中我們可以使用的相關(guān)的分配方式. ??固定分配就是我們前面介紹的,在繪制流程圖或者直接在流

    2024年02月09日
    瀏覽(26)
  • 2023最新版本Activiti7系列-身份服務(wù)

    2023最新版本Activiti7系列-身份服務(wù)

    ??在流程定義中在任務(wù)結(jié)點(diǎn)的 assignee 固定設(shè)置任務(wù)負(fù)責(zé)人,在流程定義時(shí)將參與者固定設(shè)置在.bpmn 文件中,如果臨時(shí)任務(wù)負(fù)責(zé)人變更則需要修改流程定義,系統(tǒng)可擴(kuò)展性差。針對(duì)這種情況可以給任務(wù)設(shè)置多個(gè)候選人或者候選人組,可以從候選人中選擇參與者來完成任務(wù)。

    2024年02月15日
    瀏覽(20)
  • Java --- 云尚辦公之Activiti7

    Java --- 云尚辦公之Activiti7

    目錄 一、工作流 1.1、什么是工作流 ?1.2、工作流引擎 1.3、常見工作流引擎 二、?Activiti7概述 2.1、Activiti介紹 2.2、建模語言BPMN 2.3、?Activiti使用流程 三、?Activiti使用 3.1、部署流程工具? 3.2、畫出流程圖并放入項(xiàng)目中 3.3、流程定義部署 3.4、啟動(dòng)流程實(shí)例 3.5、查詢?nèi)蝿?wù) 3.6、

    2024年02月06日
    瀏覽(21)
  • 【工作流】Activiti工作流簡(jiǎn)介以及Spring Boot 集成 Activiti7

    【工作流】Activiti工作流簡(jiǎn)介以及Spring Boot 集成 Activiti7

    什么是工作流? 工作流指通過計(jì)算機(jī)對(duì)業(yè)務(wù)流程進(jìn)行自動(dòng)化管理,實(shí)現(xiàn)多個(gè)參與者按照預(yù)定義的流程去自動(dòng)執(zhí)行業(yè)務(wù)流程。 文章源碼托管:https://github.com/OUYANGSIHAI/Activiti-learninig Activiti5是由Alfresco軟件在2010年5月17日發(fā)布的業(yè)務(wù)流程管理(BPM)框架,它是覆蓋了業(yè)務(wù)流程管理、

    2024年02月08日
    瀏覽(31)
  • 若依微服務(wù)整合activiti7.1.0.M6

    若依微服務(wù)整合activiti7.1.0.M6

    放棄activiti7新版本封裝的API,使用老版本的API,這種方式只需要直接集成即可,在7.1.0.M6版本中甚至不需要去除security的依賴。不多介紹,需要的可以私聊找我。 需要使用新版本的API,那就需要集成security,需要寫一點(diǎn)代碼實(shí)現(xiàn)security的集成。以下詳細(xì)介紹這一種方式。 步驟

    2024年02月15日
    瀏覽(16)
  • 【業(yè)務(wù)功能篇36】Springboot+activiti7 工作流引擎

    【業(yè)務(wù)功能篇36】Springboot+activiti7 工作流引擎

    業(yè)務(wù)場(chǎng)景:前段時(shí)間總結(jié)的有一個(gè)告警工單流程,我們都是直接自己建表,狀態(tài)節(jié)點(diǎn),操作節(jié)點(diǎn),都是自定義設(shè)計(jì)的,而到后面會(huì)有很多的工單流程,比如創(chuàng)建一個(gè)遺留問題電子流,指定處理人進(jìn)行分析閉環(huán),等等多種電子流,后期重復(fù)的開發(fā)工作以及維護(hù)工作會(huì)越來越多。

    2024年02月12日
    瀏覽(20)
  • List list=new ArrayList()拋出的ArrayIndexOutOfBoundsException異常

    List list=new ArrayList()拋出的ArrayIndexOutOfBoundsException異常

    1.應(yīng)用場(chǎng)景,今天生產(chǎn)日志監(jiān)控到一組new ArrayList() 進(jìn)行add 異常,具體日志如下: 具體代碼: 上面代碼是對(duì)ids 分片按照10條記錄查詢遠(yuǎn)程接口,并將結(jié)果集放到list riskSummaryList 對(duì)象中 riskSummaryList.add(new DTO() )最后輸出結(jié)果,代碼比較簡(jiǎn)單. 分析:這種情況屬于多線程并發(fā)產(chǎn)生的

    2024年02月13日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包