zoukankan      html  css  js  c++  java
  • 使用idea进行activiti工作流开发入门学习

    1、安装插件

    在idea里面,activiti的插件叫actiBPM,在插件库里面把它安装好,重启idea就行了。

    2、新建一个maven项目,并更改pom.xml。pom中依赖如下:

    <?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>
    
        <groupId>helloActiviti</groupId>
        <artifactId>helloActiviti</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.activiti</groupId>
                <artifactId>activiti-spring</artifactId>
                <version>5.18.0</version>
            </dependency>
            <!--JUnit测试-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <!--activiti-->
            <dependency>
                <groupId>org.activiti</groupId>
                <artifactId>activiti-engine</artifactId>
                <version>5.18.0</version>
                <exclusions>
                    <exclusion>
                        <artifactId>slf4j-api</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>spring-beans</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jackson-core-asl</artifactId>
                        <groupId>org.codehaus.jackson</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-lang3</artifactId>
                        <groupId>org.apache.commons</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-lang3</artifactId>
                        <groupId>org.apache.commons</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--MySQL 驱动包,如果是其他库的话需要换驱动包-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.35</version>
            </dependency>
        </dependencies>
    </project>

    3、在src/main/resources下面新建一个BPMN文件

    新建之后页面会变成如下图所示这样,中间是画布,右边是一些元素,左边是每个元素的一些详细信息,直接拖拽右边的元素就可以画流程了。

    通过拖拽,完成简单的流程(这里只用到了StartEvent、UserTask、EndEvent),连接线需要悬停在对应元素上通过拖拽中心点来产生。

    画完流程图之后要更改对应元素的name和assignee,我这里画的一个很简单的流程图,只用到了startEvent、endEvent和userTask。

    接下来,创建一个Activiti类,在这里我直接和Test一起做了。同时,写好activiti的配置文件activiti.cfg.xml(PS:在写数据库连接的时候,要先创建对应的数据库和用户,数据库最好是新的,因为activiti会创建出24张它自己的表)。
    目录结构:

    activiti.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
            <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8"></property>
            <property name="jdbcUsername" value="root"></property>
            <property name="jdbcPassword" value="root"></property>
            <property name="databaseSchemaUpdate" value="true"></property>
        </bean>
    
    
    </beans>

    测试类:

    import org.activiti.engine.*;
    import org.activiti.engine.repository.DeploymentBuilder;
    import org.junit.Test;
    import org.activiti.engine.task.Task;
    
    import java.util.List;
    
    public class ActivitiTest {
        /**
         * 会默认按照Resources目录下的activiti.cfg.xml创建流程引擎
         */
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
        @Test
        public void test() { //以下两种方式选择一种创建引擎方式:1.配置写在程序里 2.读对应的配置文件
            //1
            testCreateProcessEngine();
            //2
            testCreateProcessEngineByCfgXml();
            deployProcess();
            startProcess();
            queryTask();
    //handleTask();
        }
    
        /**
         * 测试activiti环境
         */
        @Test
        public void testCreateProcessEngine() {
            ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
            cfg.setJdbcDriver("com.mysql.jdbc.Driver");
            cfg.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activiti");
            cfg.setJdbcUsername("root");
            cfg.setJdbcPassword("root"); //配置建表策略
            cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
            ProcessEngine engine = cfg.buildProcessEngine();
        }
    
        /**
         * 根据配置文件activiti.cfg.xml创建ProcessEngine
         */
        @Test
        public void testCreateProcessEngineByCfgXml() {
            ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
            ProcessEngine engine = cfg.buildProcessEngine();
        }
    
        /**
         * 发布流程
         * RepositoryService
         */
        @Test
        public void deployProcess() {
            RepositoryService repositoryService = processEngine.getRepositoryService();
            DeploymentBuilder builder = repositoryService.createDeployment();
            builder.addClasspathResource("hello.bpmn");
            builder.deploy();
        }
    
        /**
         * 启动流程
         * <p>
         * RuntimeService
         */
        @Test
        public void startProcess() {
            RuntimeService runtimeService = processEngine.getRuntimeService();
    //可根据id、key、message启动流程
            runtimeService.startProcessInstanceByKey("myProcess_1");
        }
    
        /**
         * 查看任务
         * TaskService
         */
        @Test
        public void queryTask() {
            TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
            String assignee = "emp";
            List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
            int size = tasks.size();
            for (int i = 0; i < size; i++) {
                Task task = tasks.get(i);
            }
            for (Task task : tasks) {
                System.out.println("taskId:" + task.getId() + ",taskName:" + task.getName() + ",assignee:" + task.getAssignee() + ",createTime:" + task.getCreateTime());
            }
        }
    
        /**
         * 办理任务
         */
        @Test
        public void handleTask() {
            TaskService taskService = processEngine.getTaskService(); //根据上一步生成的taskId执行任务
            String taskId = "2504";
            taskService.complete(taskId);
        }
    
    
    }

    启动流程之后就会有相应的任务产生,存在act_ru_task表中,可以查看任务节点

  • 相关阅读:
    互联网资源获取
    Linux tomcat安装
    Linux JDK安装
    Linux入门教程
    windows命令行 查看文件树结构
    Gitea搭建及使用
    Jenkins搭建及使用
    Linux 基础环境搭建
    SpringBoot
    JSON Web Token(JWT)学习
  • 原文地址:https://www.cnblogs.com/loaderman/p/10130095.html
Copyright © 2011-2022 走看看