Activiti入门笔记

一、新建Maven项目
二、安装actiBPM插件
三、更改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>org.example</groupId>
    <artifactId>activiti</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

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

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>
        <dependency>
            <groupId>org.activiti.cloud</groupId>
            <artifactId>activiti-cloud-services-api</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

    </dependencies>
</project>
四、创建数据库(activiti)
五、使用JAVA代码生成数据库表(activiti自动生成25张表)
  1. 配置log4j,resources下创建log4j.properties

    # Set root category priority to INFO and its only appender to CONSOLE.
    #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
    log4j.rootCategory=debug, CONSOLE, LOGFILE
    # Set the enterprise logger category to FATAL and its only appender to CONSOLE.
    log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
    # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
    # LOGFILE is set to be a File appender using a PatternLayout.
    log4j.appender.LOGFILE=org.apache.log4j.FileAppender
    log4j.appender.LOGFILE.File=f:\act\activiti.log
    log4j.appender.LOGFILE.Append=true
    log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
    
  2. 添加activiti配置文件并进行配置

    默认方式的要求是在 resources 下创建 activiti.cfg.xml 文件,注意:默认方式目录和文件名不能修改,因为activiti的源码中已经设置,到固定的目录读取固定文件名的文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/contex
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <!-- 这里可以使用 链接池 dbcp-->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql:///activiti" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
            <property name="maxActive" value="3" />
            <property name="maxIdle" value="1" />
        </bean>
    
        <bean id="processEngineConfiguration"
              class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
            <!-- 引用数据源 上面已经设置好了-->
            <property name="dataSource" ref="dataSource" />
            <!-- activiti数据库表处理策略 -->
            <property name="databaseSchemaUpdate" value="true"/>
        </bean>
    </beans>
    
    六、创建测试代码生成表
    package edu.cl.test;
    
    import org.activiti.engine.*;
    import org.activiti.engine.history.HistoricActivityInstance;
    import org.activiti.engine.history.HistoricActivityInstanceQuery;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.activiti.engine.repository.ProcessDefinitionQuery;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.apache.commons.io.IOUtils;
    import org.junit.Test;
    import org.springframework.util.ResourceUtils;
    
    import java.io.*;
    import java.sql.PreparedStatement;
    import java.util.List;
    import java.util.zip.ZipInputStream;
    
    public class TestCreate {
        @Test
        public void testCreateDbTable(){
             ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
            System.out.println(processEngine);
        }
    }
    
    入门API代码使用
    1. 创建bpmn文件、转为png
    2. API操作
      package edu.cl.test;
      
      import org.activiti.engine.*;
      import org.activiti.engine.history.HistoricActivityInstance;
      import org.activiti.engine.history.HistoricActivityInstanceQuery;
      import org.activiti.engine.repository.Deployment;
      import org.activiti.engine.repository.ProcessDefinition;
      import org.activiti.engine.repository.ProcessDefinitionQuery;
      import org.activiti.engine.runtime.ProcessInstance;
      import org.activiti.engine.task.Task;
      import org.apache.commons.io.IOUtils;
      import org.junit.Test;
      import org.springframework.util.ResourceUtils;
      
      import java.io.*;
      import java.sql.PreparedStatement;
      import java.util.List;
      import java.util.zip.ZipInputStream;
      
      public class TestCreate {
          @Test
          public void testCreateDbTable(){
               ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
              System.out.println(processEngine);
          }
      
          /**
           * 部署流程
           */
          @Test
          public void testBpmnDeploy(){
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              Deployment deployment=repositoryService.createDeployment()
                      .name("出差流程申请")
                      .disableSchemaValidation()
                      .addClasspathResource("bpmns/BusinessTrip.bpmn")
                      .addClasspathResource("bpmns/BusinessTrip.png")
                      .deploy();
              System.out.println("流程部署ID"+deployment.getId());
              System.out.println("流程部署名字"+deployment.getName());
          }
      
          /**
           * 启动流程实例
           */
          @Test
          public void testStartDeployment(){
              /*
               * 1、获取工作流引擎
               * 2、获取获取流程运行管理service
               * 3、通过流程定义Key启动流程
               */
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
      
              RuntimeService runtimeService = processEngine.getRuntimeService();
      
              ProcessInstance instance=runtimeService.startProcessInstanceByKey("myProcess_1");
      
              System.out.println("流程定义ID"+instance.getProcessDefinitionId());
              System.out.println("流程实例"+instance.getId());
              System.out.println("当前活动的ID"+instance.getActivityId());
      
          }
      
          /**
           *查询个人任务
           * 1、获取流程引擎
           * 2、获取任务service
           * 3、查通过任务service查询出当前节点的任务列表
           */
          @Test
          public void testFindTaskList(){
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              TaskService taskService=processEngine.getTaskService();
              /**
               * Task的类型为org.activiti.engine.task
               */
              List<Task> tasks=taskService.createTaskQuery()
                      .processDefinitionKey("myProcess_1")
                      .taskAssignee("zhangsan")
                      .list();
      
              for(Task task:tasks)
              {
                  System.out.println("任务实例"+task.getProcessInstanceId());
                  System.out.println("任务ID"+task.getId());
                  System.out.println("任务负责人"+task.getAssignee());
                  System.out.println("任务名称"+task.getName());
              }
      
          }
      
      
          /*
           * 完成任务
           * 1、获取流程引擎
           * 2、获取service
           * 3、根据Id完成任务
           */
          @Test
          public void testCompeteTask(){
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              TaskService taskService = processEngine.getTaskService();
              taskService.complete("5005");
          }
      
      
          /**
           * 使用zip包进行批量部署
           * 1、获取流程引擎
           * 2、获取service
           * 3、读取打包文件(zip),获取到Inpuststream
           * 4、通过Inpuststream构造zipInputStream
           * 5、完成部署
           */
          @Test
          public void testDeployByZip(){
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              InputStream inputStream=this.getClass()
                      .getClassLoader()
                      .getResourceAsStream("bpmns/BusinessTrip.zip");
      
      
              ZipInputStream zipInputStream=new ZipInputStream(inputStream);
      
              Deployment deploy=repositoryService.createDeployment()
                      .disableSchemaValidation()
                      .addZipInputStream(zipInputStream)
                      .deploy();
              System.out.println(deploy.getId());
              System.out.println(deploy.getName());
          }
      
          /**
           * 获取流程定义
           * 1、获取流程引擎
           * 2、获取service对象(RespositoryService)
           * 3、获取processDefinitionQuery对象
           * 4、查询流程定义,返回流程定义集合
           * 5、输出
           */
          @Test
          public void testGetProcessDefinition(){
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
              List<ProcessDefinition> processDefinitions=processDefinitionQuery.processDefinitionKey("myProcess_1")
                      //排序
                      .orderByProcessDefinitionVersion()
                      .desc()
                      .list();
      
              //输出信息
              for (ProcessDefinition processDefinition:processDefinitions)
              {
                  System.out.println("流程定义ID"+processDefinition.getId());
                  System.out.println("流程定义名称"+processDefinition.getName());
                  System.out.println("流程定义key"+processDefinition.getKey());
                  System.out.println("流程定义版本"+processDefinition.getVersion());
                  System.out.println("流程部署ID"+processDefinition.getDeploymentId());
              }
          }
      
          /**
           * 删除流程部署信息
           *
           */
          @Test
          public void  testDeleteDeploy(){
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              String deploymentID="5001";
              repositoryService.deleteDeployment(deploymentID,true);
          }
      
          /**
           * 下载Activiti资源文件
           * 1、获取引擎
           * 2、获取Respository
           * 3、获取查询对象,ProcessDefinitionQuery,查询流程定义信息(create)
           * 4、根据流程信息获取流程定义ID
           * 5、通过RespositoryService,传递id参数,读取资源信息(获取bpmn文件的流,获取png图片的流)
           * 6、构造outputStream流
           * 7、输入输出流的转换
           * 8、关闭流
           */
          @Test
          public void testDownload() throws IOException {
              ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
              RepositoryService repositoryService = processEngine.getRepositoryService();
              ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                      .processDefinitionKey("myProcess_1")
                      .singleResult();
              String deploymentId=processDefinition.getDeploymentId();
              String pngName = processDefinition.getDiagramResourceName();
              String bpmnName=processDefinition.getResourceName();
      
              InputStream pngStream=repositoryService.getResourceAsStream(deploymentId,pngName);
              InputStream bpmnStream=repositoryService.getResourceAsStream(deploymentId,bpmnName);
      
              File pngFile = new File("E:/BusinessTrip.png");
              File bpmnFile = new File("E:/BusinessTrip.bpmn");
              FileOutputStream pngStreamOutput=new FileOutputStream(pngFile);
              FileOutputStream bpmnStreamOutput = new FileOutputStream(bpmnFile);
      
              IOUtils.copy(bpmnStream, bpmnStreamOutput);
              IOUtils.copy(pngStream,pngStreamOutput);
      
              pngStreamOutput.close();
              bpmnStreamOutput.close();
              pngStream.close();
              bpmnStreamOutput.close();
      
          }
      
          /**
           * 历史记录查询
           */
          @Test
          public void testGetHistory(){
              //获取引擎
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //获取service
              HistoryService historyService = processEngine.getHistoryService();
              //获取查询对象
              HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
              //通过实例对象查询历史记录,并对事件开始时间做升序排列
              //还可以通过其他参数进行查询
              historicActivityInstanceQuery.processInstanceId("7501")
                      .orderByHistoricActivityInstanceStartTime()
                      .asc();
      
              //查询完成返回历史数组
              List<HistoricActivityInstance> activityInstances=historicActivityInstanceQuery.list();
      
              //遍历输出信息
              for (HistoricActivityInstance historicActivityInstance:activityInstances)
              {
                  System.out.println(historicActivityInstance.getActivityId());
                  System.out.println(historicActivityInstance.getActivityName());
                  System.out.println(historicActivityInstance.getProcessDefinitionId());
                  System.out.println(historicActivityInstance.getCalledProcessInstanceId());
              }
          }
      }
      
      
      
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值