SpringBoot+Activiti6.0入门

  由于最近在公司做的是公司自研工作流框架UFLO2的相关工作,所以对于工作流有一些兴趣,而Activiti和JBPM是市场上的主流开源工作流引擎,因此,我决定尝试一下Activiti的使用

配置

SpringBoot是现在主流的框架,因此我们在框架方面选择了最新版的SpringBoot,Activiti6.0是最新的正式版,主框架采用这两个框架搭建

pom.xml配置

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

properties配置

spring.datasource.url=jdbc:mysql://localhost:3306/activiti?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#\u81EA\u52A8\u521B\u5EFA\u3001\u66F4\u65B0\u3001\u9A8C\u8BC1\u6570\u636E\u5E93\u8868\u7ED3\u6784
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.show-sql=true

案例入门

首先,我们在Eclipse中使用Activiti插件绘制一个最简单的流程图
这里写图片描述

紧接着,我们需要配置整个流程的ID,以便我们在启动的时候能够通过ID找到这个流程。此处我们定义为:myProcess。

我们定义一个Service作为执行流程(跳过流程)的表达式

public interface ResumeService {
    boolean storeResume();
}
@Service("resumeService")
public class ResumeServiceImpl implements ResumeService {

    @Override
    public boolean storeResume() {
        // TODO Auto-generated method stub
        System.out.println("任务已经执行.....................................");
        return true;
    }

}

在User Task中进行如下定义。

这里写图片描述

我们在SpringBoot自带的测试类中进行如下测试

       @Autowired
        RuntimeService runtimeService;
    @Test
    public void TestStartProcess() {
        Map<String, Object> variables = new HashMap<>();
        variables.put("applicantName", "John Doe");
        variables.put("email", "john.doe@activiti.com");
        variables.put("phoneNumber", "123456789");
        runtimeService.startProcessInstanceByKey("myProcess", variables);
    }

发现,我们定义的Service的内容并没有执行。

我通过搜索找到了这篇文章Activiti 6.0 之SkipExpression

发现需要定义一个SkipListener,或者直接在流程变量中加入:_ACTIVITI_SKIP_EXPRESSION_ENABLED =true这个变量。

public class SkipListener implements ExecutionListener {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public void notify(DelegateExecution execution) {
        // TODO Auto-generated method stub
        // 获取流程变量
        Map<String, Object> variables = execution.getVariables();
        variables.put("_ACTIVITI_SKIP_EXPRESSION_ENABLED", true);
        // 将修改同步到流程中
        execution.setVariables(variables);

    }

}

在User Task 中配置
这里写图片描述

再次运行测试函数。即可在控制台看到输出
这里写图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页