Activity7整合springboot:流程部署,定义,实例(一)

前提准备

1.依赖:
<dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M4</version>
        </dependency>
        <dependency>
            <groupId>org.activiti.dependencies</groupId>
            <artifactId>activiti-dependencies</artifactId>
            <version>7.1.0.M4</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
2.配置文件
		注意数据库版本对应,与连接的url后面的参数,同时官方因为有些小bug,需要我们自己写sql修复一下,下载直接在数据库运行即可。

链接:https://pan.baidu.com/s/1s-yDCfA7ijBvMVhsTCHpwA
提取码:7ak3

server:
  port: 8090

spring:
  application:
    name: workflow
  datasource:
    name: mysqlDatasource
    url: jdbc:mysql://localhost:3306/avtivity?useUnicode=true&nullCatalogMeansCurrent=true
    username: root
    password: 5771323
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    # 监控统计拦截的filters,如果启用log4j记得添加依赖
    filters: stat,wall



  # activiti
  activiti:
    #每次应用启动不检查Activiti数据表是否存在及版本号是否匹配,提升应用启动速度
    database-schema-update: true
      #activiti7默认不生成历史信息表,开启历史表
    db-history-used: true
    #在项目单独作为一个引擎,本身不部署流程的时候,如果resources目录没有“processes”目录,启动项目报错–找不到processes目录。需要在配置文件中添加以下内容:
    check-process-definitions: false
    process-definition-location-prefix: classpath:/processes/
    process-definition-location-suffixes:
      -**.bpmn
      -**.bpmn20.xml
    #保存历史数据级别设置为full最高级别,便于历史数据的追溯
    history-level: full
  # activiti 安全访问
  security:
    basic:
      enabled: true
    user:
      name: root
      password: root

运行后数据库会自动创建25条表。

流程部署(Deployment)

流程部署定义

	1. 部署流程就是创建bpmn图,或者导入业务流程图,通过部署代码运行到数据库中并保存起来,说白了就是搭起一个框架,到时候就按照这个流程运行。
	2. 	因为只牵扯到部署,所以需要通过注入一个类,***RepositoryService*** ,通过这个类可以部署流程,并且后面还可以获取流程的相关信息

代码案例

@Autowired
    private RepositoryService repositoryService;

    /**
     * 通过bpmn部署流程
     */
    @Test
    public void initDeploymentBPMN(){
        String filename = "processes/test.bpmn20.xml";
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource(filename)
                .name("测试任务部署test1")
                .deploy();

        System.out.println(deployment.getName());
    }

    /**
     * 获取部署流程信息
     */
    @Test
    public void getDeploymentInfo(){
        List<Deployment> list = repositoryService.createDeploymentQuery().list();
        for (Deployment deployment : list) {
            System.out.println(deployment.getId());
            System.out.println(deployment.getName());
            System.out.println(deployment.getDeploymentTime());
        }
    }
3.运行后数据会保存到如图表中
act_ge_bytearray:保存业务图,或bpmn文件
act_re_deployment:保存流程的基本信息等

流程定义(ProcessDefinition)

流程定义

1.流程定义就是获取流程部署成功后的基本信息
2. 因为都是与部署相关,所以操作的类也是 ***RepositoryService***。

案例实现

@Autowired
    private RepositoryService repositoryService;

    /**
     * 查询流程定义
     */
    @Test
    public void getDefinition(){
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
        for (ProcessDefinition p: list){
            System.out.println(p.getName());
        }
    }

    /**
     * 删除流程定义
     */

    @Test
    public void delDefinition(){
        String ppID = "";
        //第二个参数为true就是全部删除记录,false保留历史数据
        repositoryService.deleteDeployment(ppID,false);
        System.out.println("删除流程定义完成");
    }
因为是查询数据,所以也不会创建表信息

流程实例(ProcessInstance)

流程实例定义

1.如果流程定义好比一个类,流程定义就好比这个类的对象,因此也是一对多的关系。
2.同时流程实例可以挂起也可以激活
3.因为是运行时的操作,所以操作类也改变了,***runtimeService***
4.保存的数据库为: act_re_procdef

案例实现

//实例是运行状态,所以用这个类来操作
    @Autowired
    private RuntimeService runtimeService;

    /**
     * 初始化流程实例
     */
    @Test
    public void initProcessInstance(){
        //TODO 获取页面表单的数据,例如请假时间,原因等,然后将这些信息自己创建一个业务表
        //TODO 第二个参数将来就存放这个业务表的id,这样就工作流和业务关联起来了
        //TODO 第一个参数为bpmn的id
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("bpmn的id","bket01");
    }

    /**
     * 获取流程实例列表
     */
    @Test
    public void getProcessInstances(){
        List<ProcessInstance> processInstanceQuery = runtimeService.createProcessInstanceQuery().list();
        for (ProcessInstance processInstance : processInstanceQuery) {
            //输出流程实例的信息
            System.out.println(processInstance.getName());
            System.out.println(processInstance.getBusinessKey());
            System.out.println(processInstance.getId());
            //查看流程是否结束
            System.out.println(processInstance.isEnded());
            //查看流程是否挂起
            System.out.println(processInstance.isSuspended());
        }
    }
    /**
     * 暂停与激活流程实例
     */
    @Test
    public void activiteProcessInstance(){
        //挂起流程实例
        runtimeService.suspendProcessInstanceById("流程实例id");
        //激活流程
        runtimeService.activateProcessInstanceById("流程id");
    }

    /**
     * 删除流程实例
     */
    @Test
    public void delProcessInstance(){
        //第二个参数为删除理由,如果流程id已经删除了,在删除会报错
        runtimeService.deleteProcessInstance("流程id","删着玩");
        System.out.println("删除流程实例");
    }
需要注意的是:为了使工作流与咱们的业务挂钩,所以在流程实例创建的时候咱们可以创建咱们的业务表返回id与实例相关联,例如:	runtimeService.startProcessInstanceByKey("bpmn的id","bket01");
第一个参数为bpmn流程图的id,第二个参数就是咱们挂钩业务表的id,这样数据库也会相关联了。当然还有其他的到时候补充。

完整代码: git

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值