JDK21和 Flowable 7.0.0

一.Flowable

Java语言实现的轻量级工作流框架

二.项目搭建

项目结构

在这里插入图片描述

1.依赖包

本测试项目包含了 drools 、dmn 等依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>flowable-test</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>flowable</artifactId>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.boot.version>3.1.3</spring.boot.version>
        <flowable.version>7.0.0</flowable.version>
        <drools.version>9.44.0.Final</drools.version>
    </properties>
    <!--    drools-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.drools</groupId>
                <artifactId>drools-bom</artifactId>
                <type>pom</type>
                <scope>import</scope>
                <version>${drools.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
        <!-- flowable -->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>${flowable.version}</version>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter-actuator</artifactId>
            <version>${flowable.version}</version>
        </dependency>
        <!--        camel-->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-camel</artifactId>
            <version>${flowable.version}</version>
        </dependency>
        <!--        dmn-->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-dmn-engine</artifactId>
            <version>${flowable.version}</version>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-dmn-engine-configurator</artifactId>
            <version>${flowable.version}</version>
        </dependency>
        <!--        mq jms-->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-jms-spring-executor</artifactId>
            <version>${flowable.version}.M1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.flowable</groupId>
                    <artifactId>flowable-spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>6.0.1</version>
        </dependency>
        <!--        httpclient flowable http-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.14</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>4.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- pgsql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.6.0</version>
        </dependency>
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.44</version>
        </dependency>
        <!--java script execution-->
        <dependency>
            <groupId>org.openjdk.nashorn</groupId>
            <artifactId>nashorn-core</artifactId>
            <version>15.4</version>
        </dependency>
        <!--        drools-->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-engine</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-mvel</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-model-compiler</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-xml-support</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>
</project>

2.数据库

Flowable 默认使用 H2 数据库,但是可以通过修改配置文件来指定,本文使用的是 Postgres
创建一个名为 flowable 的库
Flowable 首次启动时默认会自动创建表
也可以通过官方SQL脚本手动创建表

在这里插入图片描述

3.资源文件

1.YML配置文件

server:
  port: 8086
  servlet.context-path: /flowable-rest

## 暴露 SpringBoot 除 shutdown 外的所有端点
management:
  server.port: 7291
  endpoints:
    web:
      exposure:
        include: "*"
    health:
      show-details: when_authorized
      roles: access-admin

spring:
  activemq:
    broker-url: tcp://localhost:61616
  application:
    name: flowable-rest
  banner:
    location: classpath:/org/flowable/spring/boot/flowable-banner.txt
  jmx:
    default-domain: ${
   spring.application.name}
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5432/flowable
    username: postgres
    password: 123456
    ## 连接池
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      poolName: ${
   spring.application.name}
      maxLifetime: 600000
      idleTimeout: 300000
      minimumIdle: 10
      maximumPoolSize: 50
      connection-test-query: select 1

## java object serializable
rest:
  variables:
    allow:
      serializable=true:

flowable:
  process-definition-location-prefix: classpath*:/processes/
  process-definition-location-suffixes: "**.bpmn20.xml,**.bpmn,drools/**.drl,dmn/**.dmn.xml"
  database-schema-update: true
  async-executor-activate: true
  history-level: full
  rest:
    app:
      swagger-docs-enabled: true
      create-demo-definitions: true
      authentication-mode: verify-privilege
      admin:
        user-id: rest-admin
        password: test
        firstname: Rest
        lastname: Admin
  process:
    servlet:
      path: /service
  mail.server:
    default-from: xxxxxx@qq.com
    host: smtp.qq.com
    username: xxxxxx@qq.com
    password: xxxxxx
    s-s-l-port: 465
    use-ssl: true
    use-tls: false

logging:
  level:
    org.example.*: debug

2.Drools kbase

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">

    <!--
        name: kbase 名称全局唯一
        packages: 规则文件包目录
        default: 指定为默认 kbase
    -->
    <kbase name="my_kbase" packages="processes.drools.*" default="true">
        <!--
            name: ksession 名称 kbase 下唯一
            default: 指定为默认 ksession
            clockType: 时钟类型 系统时钟或测试的伪时钟
        -->
        <ksession name="my_ks" clockType="realtime" default="true"/>
    </kbase>
</kmodule>

3.Drools rule

MyBusinessRule.drl

package drools

rule "myBusiness_1"
    when
    then
        System.out.println("Step4_1 drools 9.44.0.Final");
end

rule "myBusiness_2"
    when
    then
        System.out.println("Step4_2 drools 9.44.0.Final");
end

rule "myBusiness_3"
    when
    then
        System.out.println("Step4_3 drools 9.44.0.Final");
end

4.DMN 决策表

MyDecision.dmn.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/DMN/20180521/MODEL/"
             id="simple" name="Simple" namespace="http://activiti.org/dmn">
  <decision id="myDecision" name="Simple decision">
    <decisionTable id="myDecisionTest" hitPolicy="UNIQUE">
      <input id="inputId">
        <inputExpression id="inputExpression1" typeRef="number">
          <text>age</text>
        </inputExpression>
      </input>
      <output id="outputId" label="myResult" name="myResult" typeRef="string" />
      <rule>
        <inputEntry id="inputEntry_1">
          <text>&gt;18</text>
        </inputEntry>
        <outputEntry id="outputEntry_1">
          <text>'成年'</text>
        </outputEntry>
      </rule>
      <rule>
        <inputEntry id="inputEntry_2">
          <text>&lt;=18</text>
        </inputEntry>
        <outputEntry id="outputEntry_2">
          <text>'未成年'</text>
        </outputEntry>
      </rule>
    </decisionTable>
  </decision>
</definitions>

5.BPMN 流文件

leave_approval_process.bpmn20.xml

可通过下面 IDEA 插件查看流节点

<?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:flowable="http://flowable.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.flowable.org/processdef">
  <process id="leave_approval_process" name="leave_approval_process" isExecutable="true">
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪悟道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值