天天看點

activiti processEngineLifecycleListener使用

實際開發中,有需求如下:

第一:項目啟動部署的時候,我們需要監控activiti 工作流引擎是否真正的已經執行個體化啟動了,這裡說的是工作流引擎的啟動,不是流程執行個體的啟動,對此要特别說明一下。因為我們這裡說的工作流引擎具體指的是ProcessEngine接口中的子類ProcessEngineImpl是否執行個體化,如果這個對象在項目啟動的時候,沒有被執行個體化,那肯定工作流引擎是用不成了,因為所有的xxxService肯定都沒有。所有項目啟動的時候監控這個對象還是很有必要的。

第二:項目停止的時候,也就是項目終止的時候,我們也要去銷毀這個ProcessEngineImpl這個對象,不銷毀這個對象,肯定容易引起記憶體洩露。

上面的兩個問題,我們如何去實作呢?這就是本章我們要詳細講解的processEngineLifecycleListener的使用。

activiti 工作流引擎是以的配置資訊都是在org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration,這個對象中配置的,當然了與spring內建的時候,就在spring配置對象中配置,配置資訊如下:

xml直接配置的方式,具體的配置資訊如下:

第二種方式是動态屬性的配置方式,設定的屬性資訊如下:

上面的兩種方式,主要都是配置資訊,那如何定義配置資訊中的具體類呢?

ProcessEngineLifecycleListener接口的具體定義如下:

上面的兩種方式都需要自定義類myProcessEngineLifecycleListener,myProcessEngineLifecycleListener類的具體實作如下所示:

這樣就大功告成了,隻需要在onProcessEngineBuilt()和onProcessEngineClosed()兩個方法中書寫自己的業務邏輯即可。

onProcessEngineBuilt():activiti 工作流引擎建構的時候執行。

onProcessEngineClosed():activiti 工作流引擎銷毀的時候執行。

上面的配置生效的話,确實能實作我們需要的功能,那問題來了,activiti 工作流引擎是如何處理的呢?知其然還要知其是以然,下面我們就來看看底層是如何處理的。

主要看ProcessEngineImpl activiti 工作流引擎的核心實作類,看一下這個類的構造方法,具體實作如下:

public ProcessEngineImpl(ProcessEngineConfigurationImpl processEngineConfiguration) {

  ...

  //擷取配置檔案資訊,就是上面中的兩種配置方式中processEngineLifecycleListener具體實作類

    if (processEngineConfiguration.getProcessEngineLifecycleListener() != null) {

      processEngineConfiguration.getProcessEngineLifecycleListener().onProcessEngineBuilt(this);

    }

  }

上面的代碼可以清晰的看到,ctiviti 工作流引擎啟動的時候執行個體化ProcessEngineImpl 類的時候直接觸發了onProcessEngineBuilt方法.

那onProcessEngineClosed()方法在什麼時候被觸發呢?

很明顯,要是經驗豐富,對spring比較了解的朋友一下子就想到了close()方法,沒錯就是ProcessEngineImpl種的close()方法實作的。close()方法實作如下所示:

public void close() {

    ...

      processEngineConfiguration.getProcessEngineLifecycleListener().onProcessEngineClosed(this);

上面的close()方法中确實調用了onProcessEngineClosed()方法。

ok,關于這個processEngineLifecycleListener使用,我們就詳細介紹到這裡。