久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

擴展activiti刪除ACT

159次閱讀
沒有評論

共計 2944 個字符,預計需要花費 8 分鐘才能閱讀完成。

今天丸趣 TV 小編給大家分享一下擴展 activiti 刪除 ACT_HI_* 歷史表報錯怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

activiti 自帶了很多表,如圖:

ACT_HI_*:HI 表示歷史數據 (History) 表,包括過期的流程實例,過期的變量和過期的任務等。

歷史表中沒有創建外鍵,可以很好的控制歷史表。

在項目中,有可能不需要保存歷史記錄,也就是這些 ACT_HI_* 表可以刪除了。

刪除 ACT_HI_* 歷史表,重新啟動項目后報錯:

嚴重: Error while closing command context
org.activiti.engine.ActivitiException: Activiti database problem: Tables missing for component(s) history
 at org.activiti.engine.impl.db.DbSqlSession.dbSchemaCheckVersion(DbSqlSession.java:713)
 at org.activiti.engine.impl.db.DbSqlSession.performSchemaOperationsProcessEngineBuild(DbSqlSession.java:1097)
 at org.activiti.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:27)
 at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
 at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:60)
 at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:32)
 at org.activiti.engine.impl.ProcessEngineImpl. init (ProcessEngineImpl.java:75)
 at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:311)
 at org.activiti.engine.ProcessEngines.buildProcessEngine(ProcessEngines.java:194)
 at org.activiti.engine.ProcessEngines.initProcessEnginFromResource(ProcessEngines.java:167)
 at org.activiti.engine.ProcessEngines.init(ProcessEngines.java:98)

定位到錯誤地方:DbSqlSession.java

 if (dbSqlSessionFactory.isDbHistoryUsed()   !isHistoryTablePresent()) {
 errorMessage = addMissingComponent(errorMessage,  history 
 }

這里主要的工作是檢查數據庫中是否有歷史表,因為上面刪除了數據庫中的歷史表所以報錯了。

這里面有一個很重要的變量 dbSqlSessionFactory.isDbHistoryUsed(),從代碼上面的意思也就是可以關閉使用歷史表,好吧,就在創建配置文件的時候把它設置成 false。

 ProcessEngineConfiguration configuration = ProcessEngineConfiguration
   .createProcessEngineConfigurationFromResourceDefault();
  if(configuration instanceof ProcessEngineConfigurationImpl){
  // 這里的主要作用是為了,刪除歷史數據,在啟動的時候不去檢測歷史數據庫是否存在
  ((ProcessEngineConfigurationImpl) configuration).setDbHistoryUsed(false);
  }
  ProcessEngine processEngine = configuration.buildProcessEngine();

重新啟動后還是有問題,后來 debug 跟進去發現在使用:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

使用上面代碼獲取引擎的時候又一次去加載配置文件了,搞了半天,才發現:

ProcessEngines.getDefaultProcessEngine()獲取默認的 activiti 引擎,首先會根據字段 isInitialized 判斷是否已經加載了 activiti 配置文件,如果沒有加載就去加載 activiti.cfg.xml 和 activiti-context.xml,如果加載了,就在 processEngines 根據名稱在獲取相應的引擎。 

使用  configuration.buildProcessEngine()創建 activiti 引擎的時候,加載了 activiti 配置文件,然后把創建的引擎添加到了工具類 ProcessEngines 的 processEngines 中。并沒有設置字段 isInitialized。

所以在項目中使用  ProcessEngines.getDefaultProcessEngine()獲取默認的 activiti 引擎時候,第一次還會去加載配置文件信息。

這個怎么解決呢?

后來想到 activiti.cfg.xml 中的配置信息需要加載到 ProcessEngineConfigurationImpl 中,應該是先解析,然后尋找相應屬性的 set 方法進行賦值啊(我猜的)。那就通過配置文件設置吧:

property name= dbHistoryUsed  value= false  /

啟動后項目,成功了,不在報錯了。

以上就是“擴展 activiti 刪除 ACT_HI_* 歷史表報錯怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計2944字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 庆城县| 天镇县| 万全县| 满城县| 昌邑市| 景宁| 南投县| 昌都县| 玉溪市| 赤壁市| 汤原县| 金塔县| 宿州市| 赤水市| 太仆寺旗| 筠连县| 塘沽区| 奉化市| 营山县| 平乡县| 穆棱市| 岳普湖县| 荆州市| 抚顺市| 普兰县| 鹿泉市| 甘泉县| 宁海县| 武陟县| 沾益县| 昌宁县| 通许县| 修武县| 南昌县| 阿拉善左旗| 柞水县| 平阳县| 新晃| 金溪县| 通渭县| 阿合奇县|