最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Activiti工作流框架的使用

 更新時(shí)間:2022年02月18日 10:45:46   作者:MarlonBrando1998  
本文主要介紹了SpringBoot整合Activiti工作流框架的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Activiti 介紹

  • Activiti是一個(gè)開(kāi)源的工作流引擎,它實(shí)現(xiàn)了BPMN 2.0規(guī)范,可以發(fā)布設(shè)計(jì)好的流程定義,并通過(guò)api進(jìn)行流程調(diào)度。Activiti 作為一個(gè)遵從 Apache 許可的工作流和業(yè)務(wù)流程管理開(kāi)源平臺(tái),其核心是基于 Java 的超快速、超穩(wěn)定的 BPMN2.0 流程引擎,強(qiáng)調(diào)流程服務(wù)的可嵌入性和可擴(kuò)展性,同時(shí)更加強(qiáng)調(diào)面向業(yè)務(wù)人員。
  • 簡(jiǎn)單來(lái)說(shuō)activiti是一個(gè)業(yè)務(wù)流程管理引擎,會(huì)沿著設(shè)計(jì)者設(shè)計(jì)好的流程,一步一步的執(zhí)行下去,直到終點(diǎn)。

SpringBoot 整合

配置

activiti會(huì)框架會(huì)創(chuàng)建一系列的表,所以要配置相關(guān)數(shù)據(jù)庫(kù)的信息,需要注意的是,在url中,添加了針對(duì)數(shù)據(jù)庫(kù)的條件,其中最后一條nullCatalogMeansCurrent=true非常重要,至于有什么用就不概述了,但是沒(méi)有這條語(yǔ)句的話(huà)就無(wú)法自動(dòng)創(chuàng)建對(duì)應(yīng)的二十八張表。

server:
  port: 8014

spring:
  application:
    name: workflow
  datasource:
    name: mysqlDatasource
    url: jdbc:mysql://localhost:3306/core?useUnicode=true&nullCatalogMeansCurrent=true
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    # 監(jiān)控統(tǒng)計(jì)攔截的filters,如果啟用log4j記得添加依賴(lài)
    filters: stat,wall
  # activiti
  activiti:
    #每次應(yīng)用啟動(dòng)不檢查Activiti數(shù)據(jù)表是否存在及版本號(hào)是否匹配,提升應(yīng)用啟動(dòng)速度
    database-schema-update: true
    #在項(xiàng)目單獨(dú)作為一個(gè)引擎,本身不部署流程的時(shí)候,如果resources目錄沒(méi)有“processes”目錄,啟動(dòng)項(xiàng)目報(bào)錯(cuò)–找不到processes目錄。需要在配置文件中添加以下內(nèi)容:
    check-process-definitions: false
    process-definition-location-prefix: classpath:/processes/
    process-definition-location-suffixes:
      -**.bpmn
      -**.bpmn20.xml
    #保存歷史數(shù)據(jù)級(jí)別設(shè)置為full最高級(jí)別,便于歷史數(shù)據(jù)的追溯
    history-level: full
  # activiti 安全訪(fǎng)問(wèn)
  security:
    basic:
      enabled: true
    user:
      name: root
      password: root

版本問(wèn)題

  • 注意 SpringBootActiviti 的版本問(wèn)題
  • springboot2.0不能與activiti6.0.0直接集成使用,因?yàn)?code>activiti6.0.0出來(lái)的時(shí)候springboot2.0還沒(méi)有出來(lái),activiti6.0.0 支持springboot1.2.6以上,2.0.0以下的版本。

使用 starter

依賴(lài)

這個(gè)版本滿(mǎn)足高版本的springboot,直接使用就行

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.1.0.M3.1</version>
</dependency>

需要注意的是,這里的依賴(lài)版本,需要對(duì)應(yīng)數(shù)據(jù)庫(kù)中act_ge_property表中schema.version版本信息,所以一般不建議在創(chuàng)建完表之后修改依賴(lài)信息

啟動(dòng)項(xiàng)目成功后自動(dòng)創(chuàng)建表

請(qǐng)?zhí)砑訄D片描述

需要在配置文件中加上 activiti-security的配置

 # activiti 安全訪(fǎng)問(wèn)
  security:
    basic:
      enabled: true
    user:
      name: root
      password: root

不使用 starter

依賴(lài)

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

配置代碼

@Configuration
public class ActivitiConfig {

    private static final Logger logger = LoggerFactory.getLogger(ActivitiConfig.class);


    /**
     * 配置分為以下幾步驟
     * 1. 創(chuàng)建ActivitiConfig
     * 2. 使用ActivitiConfig創(chuàng)建ProcessEngineFactoryBean
     * 3. 使用ProcessEngineFactoryBean創(chuàng)建ProcessEngine對(duì)象
     * 4. 使用ProcessEngine對(duì)象創(chuàng)建需要的服務(wù)對(duì)象
     */
    private final DataSource dataSource;

    private final PlatformTransactionManager platformTransactionManager;

    @Autowired
    public ActivitiConfig(DataSource dataSource, PlatformTransactionManager transactionManager) {
        this.dataSource = dataSource;
        platformTransactionManager = transactionManager;
    }

    /*
     * 1. 創(chuàng)建配置文件,也就是提供一些配置信息,這樣就可以自定義自己的創(chuàng)建信息了
     * 需要一些參數(shù),1. 數(shù)據(jù)源。2. 事務(wù)管理器。
     * 這里還加入了自動(dòng)掃描process包下的bpmn(流程定義文件)的設(shè)置,這樣就可以省去了部署
     * */
    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration() {
        SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
        spec.setDataSource(dataSource);
        spec.setTransactionManager(platformTransactionManager);
        spec.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        Resource[] resources = null;
        // 啟動(dòng)自動(dòng)部署流程
        try {
            resources = new PathMatchingResourcePatternResolver().getResources("classpath*:processes/*.*.xml");
        } catch (IOException e) {
            logger.error("Error Occur:", e);
        }
        spec.setDeploymentResources(resources);
        return spec;
    }

    @Bean
    public ProcessEngineFactoryBean processEngine() {
        ProcessEngineFactoryBean engineFactoryBean = new ProcessEngineFactoryBean();
        engineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration());
        return engineFactoryBean;
    }

    @Bean
    public RepositoryService repositoryService() throws Exception {
        return Objects.requireNonNull(processEngine().getObject()).getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService() throws Exception {
        return Objects.requireNonNull(processEngine().getObject()).getRuntimeService();
    }

    @Bean
    public TaskService taskService() throws Exception {
        return Objects.requireNonNull(processEngine().getObject()).getTaskService();
    }

    @Bean
    public HistoryService historyService() throws Exception {
        return Objects.requireNonNull(processEngine().getObject()).getHistoryService();
    }
}

resources中創(chuàng)建process文件夾,文件夾的路徑和名字需要和ActivitiConfig中的配置保持一致啟動(dòng)springBoot項(xiàng)目即可創(chuàng)建完成

使用 Activiti

Idea 安裝 Activiti BPMN visualizer 插件

編寫(xiě)測(cè)試 bpmn.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn"
             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
             xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
             typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
             targetNamespace="http://www.activiti.org/processdef">
    <process id="test" name="test" isExecutable="true">
        <startEvent id="startevent1" name="Start"></startEvent>
        <endEvent id="endevent1" name="End"></endEvent>
        <userTask id="usertask1" name="HelloWorld" activiti:assignee="goxcheer"></userTask>
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
    </process>
    <bpmndi:BPMNDiagram id="BPMNDiagram_test">
        <bpmndi:BPMNPlane bpmnElement="test" id="BPMNPlane_test">
            <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
                <omgdc:Bounds height="35.0" width="41.0" x="220.0" y="180.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
                <omgdc:Bounds height="35.0" width="35.0" x="640.0" y="180.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
                <omgdc:Bounds height="55.0" width="105.0" x="390.0" y="170.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
                <omgdi:waypoint x="261.0" y="197.0"></omgdi:waypoint>
                <omgdi:waypoint x="390.0" y="197.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
                <omgdi:waypoint x="495.0" y="197.0"></omgdi:waypoint>
                <omgdi:waypoint x="640.0" y="197.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
</definitions>

編寫(xiě)測(cè)試代碼

測(cè)試代碼

@RequestMapping("/test")
@RestController
public class ActivitiTestController {

    private static final Logger logger = LoggerFactory.getLogger(ActivitiTestController.class);

    @Autowired
    RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    @RequestMapping("/test1")
    public void test1() {
        logger.info("Start.........");
        ProcessInstance pi = runtimeService.startProcessInstanceByKey("test");
        logger.info("流程啟動(dòng)成功,流程id:{}", pi.getId());
    }


    @RequestMapping("/test2")
    public void test2() {
        String userId = "root";
        List<Task> resultTask = taskService.createTaskQuery().processDefinitionKey("test").taskCandidateOrAssigned(userId).list();
        logger.info("任務(wù)列表:{}", resultTask);
    }

}

…簡(jiǎn)單配置到此結(jié)束

完整配置代碼見(jiàn) :https://gitee.com/Marlon_Brando/onlineshop_back/tree/develop/os_workflow

到此這篇關(guān)于SpringBoot整合Activiti工作流框架的使用的文章就介紹到這了,更多相關(guān)SpringBoot Activiti工作流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • java獲取文件編碼,jsoup獲取html純文本操作

    java獲取文件編碼,jsoup獲取html純文本操作

    這篇文章主要介紹了java獲取文件編碼,jsoup獲取html純文本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 基于Arrays.sort()和lambda表達(dá)式

    基于Arrays.sort()和lambda表達(dá)式

    這篇文章主要介紹了Arrays.sort()和lambda表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置)

    詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置)

    這篇文章主要介紹了詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • SpringBoot集成消息隊(duì)列的項(xiàng)目實(shí)踐

    SpringBoot集成消息隊(duì)列的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot集成消息隊(duì)列的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • springboot多文件上傳實(shí)現(xiàn)使用postman測(cè)試多文件上傳接口

    springboot多文件上傳實(shí)現(xiàn)使用postman測(cè)試多文件上傳接口

    這篇文章主要介紹了springboot多文件上傳實(shí)現(xiàn)使用postman測(cè)試多文件上傳接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中數(shù)據(jù)轉(zhuǎn)換及字符串的“+”操作方法

    Java中數(shù)據(jù)轉(zhuǎn)換及字符串的“+”操作方法

    本文主要介紹了Java中的數(shù)據(jù)類(lèi)型轉(zhuǎn)換,包括隱式轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換,隱式轉(zhuǎn)換通常用于將范圍較小的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為范圍較大的數(shù)據(jù)類(lèi)型,而強(qiáng)制轉(zhuǎn)換則是將范圍較大的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為范圍較小的數(shù)據(jù)類(lèi)型,本文介紹Java中數(shù)據(jù)轉(zhuǎn)換以及字符串的“+”操作,感興趣的朋友一起看看吧
    2024-10-10
  • 零基礎(chǔ)寫(xiě)Java知乎爬蟲(chóng)之將抓取的內(nèi)容存儲(chǔ)到本地

    零基礎(chǔ)寫(xiě)Java知乎爬蟲(chóng)之將抓取的內(nèi)容存儲(chǔ)到本地

    上一回我們說(shuō)到了如何把知乎的某些內(nèi)容爬取出來(lái),那么這一回我們就說(shuō)說(shuō)怎么把這些內(nèi)容存儲(chǔ)到本地吧。
    2014-11-11
  • Eclipse安裝Free marker插件教程

    Eclipse安裝Free marker插件教程

    這篇文章主要為大家詳細(xì)介紹了Eclipse安裝Free marker插件教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 淺談Java多線(xiàn)程實(shí)現(xiàn)及同步互斥通訊

    淺談Java多線(xiàn)程實(shí)現(xiàn)及同步互斥通訊

    下面小編就為大家?guī)?lái)一篇淺談Java多線(xiàn)程實(shí)現(xiàn)及同步互斥通訊。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java詳解AVL樹(shù)的應(yīng)用

    Java詳解AVL樹(shù)的應(yīng)用

    AVL樹(shù)是高度平衡的二叉樹(shù),它的特點(diǎn)是AVL樹(shù)中任何節(jié)點(diǎn)的兩個(gè)子樹(shù)的高度最大差別為1,本文主要給大家介紹了Java如何實(shí)現(xiàn)AVL樹(shù),需要的朋友可以參考下
    2022-07-07

最新評(píng)論

屏山县| 天台县| 马公市| 绥江县| 秦皇岛市| 宜兰县| 沅江市| 武隆县| 合水县| 陵川县| 新闻| 浦东新区| 瑞金市| 江北区| 宣威市| 鹿邑县| 宁远县| 亳州市| 深圳市| 上饶县| 桂平市| 阜南县| 旅游| 宜兰县| 衡南县| 临邑县| 福清市| 宁波市| 绥中县| 青海省| 来宾市| 巴林左旗| 思南县| 大英县| 丰城市| 莱芜市| 阜城县| 白朗县| 思南县| 奇台县| 淮南市|