91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

擴展activiti刪除ACT_HI_*歷史表報錯怎么解決

發布時間:2022-03-25 16:08:18 來源:億速云 閱讀:542 作者:iii 欄目:云計算

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

activiti自帶了很多表,如圖:

擴展activiti刪除ACT_HI_*歷史表報錯怎么解決

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_*歷史表報錯怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乾安县| 壤塘县| 宁强县| 商丘市| 民和| 同德县| 龙里县| 延吉市| 呈贡县| 鄂托克旗| 丹阳市| 石棉县| 龙泉市| 瑞安市| 库尔勒市| 墨竹工卡县| 综艺| 涿州市| 新竹县| 泰州市| 山丹县| 九台市| 苗栗市| 翼城县| 竹山县| 徐闻县| 沐川县| 乐业县| 乃东县| 双江| 太仓市| 阳高县| 土默特左旗| 九江市| 平果县| 浦江县| 永春县| 紫云| 隆德县| 阿克陶县| 绥宁县|