activiti6.0源碼剖析之操作引擎表

activiti源碼剖析之操作引擎表

首先activiti擁有自己的23張表結(jié)構(gòu)曹动,具體表的意義可以看這里的一篇文章Activiti 23張表及7大服務(wù)詳解院刁,那么我接下來(lái)就說(shuō)一下activiti數(shù)據(jù)庫(kù)的生成策略

看一下activiti配置文件

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_activiti" />
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="1234" />

        <property name="databaseSchemaUpdate" value="true" />
    </bean>
這里再實(shí)例化流程引擎配置對(duì)象時(shí)混稽,指定databaseSchemaUpdate的值來(lái)執(zhí)行數(shù)據(jù)庫(kù)表的生成策略杂彭。具體值的策略分析如下
databaseSchemaUpdate值 作用
false(默認(rèn)值) 流程引擎啟動(dòng)時(shí)双揪,首先從ACT_GE_PROPERTY表中查詢Activiti引擎的版本值,然后獲取ProcessEngine接口中定義的VERSION靜態(tài)變量值句喷,兩者進(jìn)行對(duì)比镣典, 如果數(shù)據(jù)庫(kù)中的表不存在或者表存在但版本不匹配則直接拋出異常
true 流程引擎啟動(dòng)時(shí)會(huì)對(duì)所有的表進(jìn)行更新操作(DDL腳本可見(jiàn)upgrade目錄下),如果數(shù)據(jù)庫(kù)中的表不存在則開(kāi)始創(chuàng)建表(DDL腳本可見(jiàn)create目錄下)
create-drop 流程引擎啟動(dòng)時(shí)創(chuàng)建表唾琼,流程引擎關(guān)閉時(shí)刪除表(比如processEngine.close())
drop-create 流程引擎啟動(dòng)時(shí)首先刪除數(shù)據(jù)庫(kù)中存在的表兄春,然后創(chuàng)建表(這種方式再刪除的時(shí)候不需要手動(dòng)關(guān)閉流程引擎)
create l流程引擎啟動(dòng)時(shí)直接創(chuàng)建表不管數(shù)據(jù)庫(kù)中是否存在表,也就是如果數(shù)據(jù)庫(kù)中已經(jīng)存在了表锡溯,那么再次創(chuàng)建就會(huì)報(bào)錯(cuò)
那么具體是怎么根據(jù)databaseSchemaUpdate來(lái)生成數(shù)據(jù)庫(kù)的呢赶舆?在實(shí)例化ProcessEngineImpl的時(shí)候哑姚,完成屬性裝配之后(想要具體了解可以看這篇文章),執(zhí)行:
if (processEngineConfiguration.isUsingRelationalDatabase() && processEngineConfiguration.getDatabaseSchemaUpdate() != null) {
            this.commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), new SchemaOperationsProcessEngineBuild());
        }

在這里看SchemaOperationsProcessEngineBuild實(shí)現(xiàn):

代碼SchemaOperationsProcessEngineBuild.java

 public Object execute(CommandContext commandContext) {
        DbSqlSession dbSqlSession = commandContext.getDbSqlSession();
        if (dbSqlSession != null) {
            dbSqlSession.performSchemaOperationsProcessEngineBuild();
        }

        return null;
    }

代碼DbSqlSession.java

    public void performSchemaOperationsProcessEngineBuild() {
        String databaseSchemaUpdate = Context.getProcessEngineConfiguration().getDatabaseSchemaUpdate();
        log.debug("Executing performSchemaOperationsProcessEngineBuild with setting " + databaseSchemaUpdate);
        if ("drop-create".equals(databaseSchemaUpdate)) {
            try {
                this.dbSchemaDrop();
            } catch (RuntimeException var3) {
                ;
            }
        }

        if (!"create-drop".equals(databaseSchemaUpdate) && !"drop-create".equals(databaseSchemaUpdate) && !"create".equals(databaseSchemaUpdate)) {
            if ("false".equals(databaseSchemaUpdate)) {
                this.dbSchemaCheckVersion();
            } else if ("true".equals(databaseSchemaUpdate)) {
                this.dbSchemaUpdate();
            }
        } else {
            this.dbSchemaCreate();
        }

    }
  • 從這里可以看到如果databaseSchemaUpdate為drop-create,create-drop,create中任意一個(gè)都會(huì)調(diào)用this.dbSchemaCreate();
  • 然后如果是drop-create會(huì)在調(diào)用這句話之前調(diào)用this.dbSchemaDrop();
  • databaseSchemaUpdate為false時(shí),調(diào)用this.dbSchemaCheckVersion();這里會(huì)先檢查版本以及表是否已經(jīng)存在
  • databaseSchemaUpdate為true時(shí)芜茵,調(diào)用this.dbSchemaUpdate();進(jìn)行存在即更新叙量,不存在則創(chuàng)建的操作
當(dāng)然我們也可以通過(guò)擴(kuò)展DbSqlSession類在引擎創(chuàng)建、刪除夕晓、更新表時(shí)執(zhí)行項(xiàng)目中的DDL腳本,想了解可以參考分享牛的這篇文章activiti修改內(nèi)置的DDL SQL腳本初始化邏輯
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悠咱,一起剝皮案震驚了整個(gè)濱河市蒸辆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌析既,老刑警劉巖躬贡,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異眼坏,居然都是意外死亡拂玻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門宰译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)檐蚜,“玉大人,你說(shuō)我怎么就攤上這事沿侈〈车冢” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵缀拭,是天一觀的道長(zhǎng)咳短。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蛛淋,這世上最難降的妖魔是什么咙好? 我笑而不...
    開(kāi)封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮褐荷,結(jié)果婚禮上勾效,老公的妹妹穿的比我還像新娘。我一直安慰自己叛甫,他們只是感情好葵第,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著合溺,像睡著了一般卒密。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棠赛,一...
    開(kāi)封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天哮奇,我揣著相機(jī)與錄音膛腐,去河邊找鬼。 笑死鼎俘,一個(gè)胖子當(dāng)著我的面吹牛哲身,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贸伐,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼勘天,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捉邢?” 一聲冷哼從身側(cè)響起脯丝,我...
    開(kāi)封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伏伐,沒(méi)想到半個(gè)月后宠进,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藐翎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年材蹬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吝镣。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堤器,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出末贾,到底是詐尸還是另有隱情吼旧,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布未舟,位于F島的核電站圈暗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏裕膀。R本人自食惡果不足惜员串,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昼扛。 院中可真熱鬧寸齐,春花似錦、人聲如沸抄谐。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛹含。三九已至毅厚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浦箱,已是汗流浹背吸耿。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工祠锣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咽安。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓伴网,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妆棒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子澡腾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常糕珊。 O...
    我想起個(gè)好名字閱讀 5,256評(píng)論 0 9
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,305評(píng)論 0 85
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 7,790評(píng)論 5 116
  • 去昨天的圖書館居然沒(méi)找到昨天看的《傲慢與偏見(jiàn)》动分,但發(fā)現(xiàn)了另一本有趣的書。 什么是番茄工作法?簡(jiǎn)單說(shuō)放接,就是列出你當(dāng)天...
    易秒閱讀 197評(píng)論 0 1
  • 前一陣子我曾在朋友圈看到一句話:魚從水中游刺啦,風(fēng)從網(wǎng)中過(guò)留特。這句話不禁讓我想起時(shí)間纠脾,這兩者看似八竿子打不著,但我腦中的...
    盛一旖閱讀 146評(píng)論 0 0