springboot項目集成activity


1、按照上一篇博客,新建好springboot項目后,在項目pom.xml文件中添加activity依賴

<dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring-boot-starter-basic</artifactId>
      <version>6.0.0</version>
</dependency>
                

2、修改啟動類,此時啟動會發現有報錯

原因:springboot2.0不能與activiti6.0.0直接集成使用,因為activiti6.0.0出來的時候springboot2.0還沒有出來,activiti6.0.0 支持springboot1.2.6以上,2.0.0以下的版本。

 

 

 解決辦法:修改springboot啟動類,詳見https://www.jianshu.com/p/085580b3dda8

 

 

 3、流程文件

在src/main/java/resources目錄下新建processes目錄,並在該目錄下新增一個業務流程文件(默認以.bpmn20.xml或.bpmn為后綴名)(activity默認校驗resources下的processes文件夾里的流程文件,如果沒有processes目錄並且目錄下沒有流程文件會報錯class path resource [processes/] cannot be resolved to URL because it does not exist),
可以在配置文件中配置spring.activiti.check-process-definitions=false,設置為不校驗,這樣就不會報錯。參考 https://www.jianshu.com/p/085580b3dda8
 
4、修改activity默認的id生成策略。
(1).activiti默認的ID生成策略在高並發場景下會出現ID重復的情況,因此在高並發場景下建議采用UUID的策略。
(2).傳統的spring在配置文件中添加idGenerator屬性:
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <!-- UUID作為主鍵生成策略 -->
        <property name="idGenerator" ref="idGen" />
    </bean>

(3).springboot中在配置類中修改idGenerator。

需要寫一個類實現IdGenerator,並重寫getNextId()方法;
activity也內置了一個實現類org.activiti.engine.impl.persistence.StrongUuidGenerator,生成的uuid是帶'-'的
package com.mycompany.myapp.config;

import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.context.annotation.Configuration;

import com.mycompany.myapp.utils.IdGen;

/**
* @author xuzhipeng
* @date 2018-11-09 10:26:47
* @since 1.0
*/
@Configuration
public class ActivitiConfig implements ProcessEngineConfigurationConfigurer {

    @Override
    public void configure(SpringProcessEngineConfiguration springProcessEngineConfiguration) {
        springProcessEngineConfiguration.setIdGenerator(new IdGen());
    }

}
package com.mycompany.myapp.utils;

import java.util.UUID;

import org.activiti.engine.impl.cfg.IdGenerator;

/**
* @author xuzhipeng
* @date 2018-11-09 10:47:59
* @since 1.0
*/
public class IdGen implements IdGenerator{

    /**
     * 封裝JDK自帶的UUID, 通過Random數字生成, 中間無-分割.
     */
    public static String uuid() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * Activiti ID 生成
     */
    @Override
    public String getNextId() {
        return IdGen.uuid();
    }

}

5、配置文件屬性

(1)spring.activiti.database-schema-update

 

 databaseSchemaUpdate配置項可以設置流程引擎啟動和關閉時數據庫執行的策略。 databaseSchemaUpdate有以下四個值:

false:false為默認值,設置為該值后,Activiti在啟動時,會對比數據庫表中保存的版本,如果版本不匹配時,將在啟動時拋出異常。
true:設置為該值后,Activiti會對數據庫中所有的表進行更新,如果表不存在,則Activiti會自動創建。
create-drop:Activiti啟動時,會執行數據庫表的創建操作,在Activiti關閉時,執行數據庫表的刪除操作。
drop-create:Activiti啟動時,執行數據庫表的刪除操作在Activiti關閉時,會執行數據庫表的創建操作。

設置為true后啟動應用,會在數據庫里創建28張表,表創建好之后停止應用,設置為false,每次應用啟動不檢查Activiti數據表是否存在及版本號是否匹配,以提升應用啟動速度

(2)spring.activiti.history-level

#保存歷史數據級別設置為full最高級別,便於歷史數據的追溯
spring.activiti.history-level=full

對於歷史數據,保存到何種粒度,Activiti提供了history-level屬性對其進行配置。history-level屬性有點像log4j的日志輸出級別,該屬性有以下四個值:

none:不保存任何的歷史數據,因此,在流程執行過程中,這是最高效的。
activity:級別高於none,保存流程實例與流程行為,其他數據不保存。
audit:除activity級別會保存的數據外,還會保存全部的流程任務及其屬性。audit為history的默認值。
full:保存歷史數據的最高級別,除了會保存audit級別的數據外,還會保存其他全部流程相關的細節數據,包括一些流程參數等。

(3)spring.activiti.check-process-definitions

#關閉activiti自動部署(使用流程設計器部署,不使用具體文件訪問方式)
spring.activiti.check-process-definitions=false

6、集成在線流程設計器Activiti Modeler。

(1)pom文件添加activiti-modeler依賴。

        <!-- https://mvnrepository.com/artifact/org.activiti/activiti-modeler -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-modeler</artifactId>
            <version>5.22.0</version>
            <exclusions>
                <exclusion>
                        <groupId>org.activiti</groupId>
                        <artifactId>activiti-bpmn-model</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

(2)下載activiti5.22.0源碼https://github.com/Activiti/Activiti/tree/activiti-5.22.0




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM