activiti-engine.jar包中自帶了建立activiti工作流資料庫表的sql語句和自動初始化資料庫的方法。sql語句在org.activiti.db.create包下,初始化方法在org.activiti.engine.impl.db.dbschemacreate的main方法之中。
}以上都是以5.21版本的包為例。由第一張圖可以看出兩點:(一)目前activiti支援的資料庫型別有:db2、h2、hsql、mssql、mysql、oracle和postgres資料庫。(二)activiti的資料庫表核心在於engine,identity和history是分離了出來。根據官方指導手冊的說法,activiti的history功能是可以選擇是否開啟的,如果不需要自然不用history相關的表,而identity和使用者以及使用者組相關的表也是不一定需要的,可以使用自己的使用者結構表(具體怎麼做還沒有嘗試)。
主要步驟有四步:
1.新增activiti-engine.jar包以及其依賴包到構建路徑
2.新增mysql-connector-j**a包,mysql資料庫的驅動包
3.編寫activiti.cfg.xml配置檔案,將其放入classpath下,m**en專案就是src/main/resources下就行了。
4.執行dbschemacreate的main方法
1.新建乙個m**en專案,這個就不講了。在pom.xml中新增activiti-engine依賴:
org.activiti2.新增mysql資料庫驅動依賴activiti-engine
5.21.0
mysql3.在src/main/resources下新建乙個檔案,命名為activiti.cfg.xml(不能是其它的名字)。在裡面配置以下內容:mysql-connector-j**a
5.1.38
<?xml version="1.0" encoding="utf-8"?>裡面的相關配置databasetype,jdbcurl等5個配置項,改成自己的相符合的就行了。
如果沒什麼問題,用工具檢視資料庫,應該是能夠看到自動建立出來的25張表的。
首先看程式,啟動專案後會驗證一次資料庫的表結構版本和當前jar包版本是否匹配,這個流程是為了校驗而已。而在初始化資料庫的時候一般不會執行這個校驗,但是當錯誤的判定資料庫的表存在時,會錯誤的進入校驗資料庫表結構版本的分支之中,導致原本資料庫還沒有初始化表,卻去查詢表act_ge_property(存放了版本資訊),自然而然地報了表或檢視不存在了。問題在於為什麼明明表不存在,卻判定表示存在的。
檢視異常鏈追蹤源**會發現其實際上判斷的是表act_ru_execution是否存在。其從dbsqlsession的
dbschemacreate()方法開始:
public void dbschemacreate()這段**很清楚地展示了相關關係,先判斷表是否存在,存在就驗證版本號,不存在就建立engine,後面判斷history和identity是否被使用(預設使用),使用了就建立相關的表。這裡很明顯就是isenginetablepresent()返回了true才導致了這個問題,繼續追蹤到這個類中的istablepresent()方法,其真正作用的是下面這段:} else
if (dbsqlsessionfactory.isdbhistoryused())
if (dbsqlsessionfactory.isdbidentityused())
}
public static string jdbc_metadata_table_types = ;第二個引數對於oracle資料庫來說比較重要,就像之前說的造成這個問題的兩種可能的場景。如果出現了這個問題,就需要配置,使schema這個引數為大寫的登陸使用者名稱(必須大寫,與oracle的機制有關)。這個引數的設定,不斷向上查詢原始碼,會發現只需要在配置檔案中配置databaseschema屬性就可以了(value大寫)。mysql資料庫應該就沒有太大問題了。try finally catch (exception e)
}
最後簡單介紹一下activiti資料庫表的組成。之前看建立資料庫的sql語句就很清楚,表分為必要的engine和非必要的history以及identity。其中act_hi_*這8張表就與history相關。act_id_*這4張與identity有關。剩餘的全是engine必備的表,也可以簡單的分下類:act_ru_*這6張表是runtime流程執行中相關的表。act_re_*這3張表是repository這個是管理部署和流程定義相關的表,基本不會改變,除非更改部署和流程定義。act_ge_property存放了資料庫表版本的相關資訊,只有在公升級版本的時候會改變。act_ge_bytearray存放了一些位元組流資料,一般是各種資源資料如流程定義的xml,流程圖等。act_evt_log看名字就知道是事件日誌的表,如何使用暫時不知。最後一張act_procdef_info表看名字也就是流程定義詳情表。那些歸類了得表具體作用看*,其字尾的名字,大概就知道其具體作用,如:task(任務)、variable(變數)等,這裡就不一一介紹了。
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...