以下是关于“Springboot集成activity过程图解”的完整攻略。
步骤一:添加依赖
首先,在Spring Boot项目中添加依赖,以便可以使用activity。 在项目的pom.xml文件中添加以下依赖项:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
步骤二:配置数据库
activity需要一个数据库来存储流程定义、实例和任务等信息。因此,我们需要在src/main/resource目录下创建一个application.properties文件,并配置activity与数据库之间的连接。
具体配置如下:
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_activity?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
步骤三:创建流程
接下来,我们将使用BPMN 2.0标准来定义一个简单的流程。在这个流程中,我们将使用“审批请假”这个场景作为示例。
使用Eclipse或IntelliJ IDEA,创建一个名为leaveProcess.bpmn20.xml的BPMN 2.0文件。
<?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"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
id="Definitions_1"
targetNamespace="http://activiti.org/bpmn20"
xmlns:activiti="http://activiti.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">
<!-- 流程元素 -->
<process id="leaveProcess" name="请假审批">
<!-- 开始节点 -->
<startEvent id="startEvent" name="开始">
<outgoing>flow3</outgoing>
</startEvent>
<!-- 请假节点 -->
<userTask id="userTask" name="请假流程" activiti:assignee="${userId}">
<incoming>flow3</incoming>
<outgoing>flow4</outgoing>
</userTask>
<!-- 请假节点 -->
<userTask id="managerTask" name="经理审批" activiti:assignee="${manager}">
<incoming>flow4</incoming>
<outgoing>flow5</outgoing>
</userTask>
<!-- 请假节点 -->
<userTask id="hrTask" name="HR审批" activiti:assignee="${hr}">
<incoming>flow5</incoming>
<outgoing>flow6</outgoing>
</userTask>
<!-- 结束节点 -->
<endEvent id="endEvent" name="结束">
<incoming>flow6</incoming>
</endEvent>
<!-- 流程连线 -->
<sequenceFlow id="flow3" name="start userTask" sourceRef="startEvent" targetRef="userTask"/>
<sequenceFlow id="flow4" name="userTask managerTask" sourceRef="userTask" targetRef="managerTask"/>
<sequenceFlow id="flow5" name="managerTask hrTask" sourceRef="managerTask" targetRef="hrTask"/>
<sequenceFlow id="flow6" name="hrTask endEvent" sourceRef="hrTask" targetRef="endEvent"/>
</process>
<!-- 流程图元素 -->
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="leaveProcess">
<bpmndi:BPMNEdge id="edge9" bpmnElement="flow3">
<omgdi:waypoint x="215" y="140"/>
<omgdi:waypoint x="257" y="140"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge10" bpmnElement="flow4">
<omgdi:waypoint x="310" y="140"/>
<omgdi:waypoint x="350" y="140"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge11" bpmnElement="flow5">
<omgdi:waypoint x="400" y="140"/>
<omgdi:waypoint x="440" y="140"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge12" bpmnElement="flow6">
<omgdi:waypoint x="490" y="140"/>
<omgdi:waypoint x="530" y="140"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape2" bpmnElement="startEvent">
<omgdc:Bounds x="179" y="122" width="30" height="30"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape3" bpmnElement="userTask">
<omgdc:Bounds x="257" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape4" bpmnElement="managerTask">
<omgdc:Bounds x="350" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape5" bpmnElement="hrTask">
<omgdc:Bounds x="440" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape6" bpmnElement="endEvent">
<omgdc:Bounds x="530" y="122" width="30" height="30"/>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
在这个BPMN 2.0文件中,我们定义了一个名为“开始”的开始事件,一个名为“结束”的结束事件和三个用户任务。在用户任务中,我们使用了activiti:assignee属性指定任务负责人的用户名。
步骤四:启动流程
在Spring Boot项目的src/main/java目录下,创建一个名为ActivityDemoApplication的Spring Boot应用程序。
@SpringBootApplication
public class ActivityDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ActivityDemoApplication.class, args);
}
}
接下来,在src/main/java目录下创建一个名为ProcessEngineConfig的Java类,以引导activity的流程引擎;并在类中创建一个ProcessEngineConfiguration对象,并配置它们所需的Engine组件。
@Configuration
@Order(1)
public class ProcessEngineConfig implements ProcessEngineConfigurationConfigurer {
@Qualifier("dataSource")
@Autowired
private DataSource dataSource;
@Bean
public ProcessEngineConfigurationImpl processEngineConfiguration(ProcessEngineConfigurationConfigurer processEngineConfigurationConfigurer) {
SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
configuration.setDataSource(dataSource)
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setAsyncExecutorEnabled(true)
.setAsyncExecutorActivate(true)
.setHistory(ProcessEngineConfiguration.HISTORY_FULL)
.setTransactionManager(new SpringTransactionManager())
.setJobExecutorActivate(true)
.setActivityFontName("宋体")
.setLabelFontName("宋体")
.setTitleFontName("宋体");
processEngineConfigurationConfigurer.configure(configuration);
return configuration;
}
@Bean
public ProcessEngineFactoryBean processEngineFactoryBean() {
ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
factoryBean.setProcessEngineConfiguration(processEngineConfiguration(null));
return factoryBean;
}
@Bean
public ProcessEngine processEngine(ProcessEngineFactoryBean factoryBean) throws Exception {
return factoryBean.getObject();
}
}
在上述代码中,我们定义了一个ProcessEngineConfig类,并实现了一个ProcessEngineConfigurationConfigurer接口,以自定义activity的流程引擎。 这里指定了dataSource作为存储活动数据的数据库,并设置一些流程引擎的配置参数。例如,我们使流程引擎具有异步执行能力,并使流程引擎在启动时激活。 我们还定义了字体名称,使活动的用户任务能够以正确的字体渲染。
在/src/main/java目录下创建一个名为LeaveController的Java类,并使用@RestController注解将它标记为REST API。这个接口将会处理“请假”流程请求。
@RestController
@RequestMapping(value = "/leave")
public class LeaveController {
@Autowired
private RuntimeService runtimeService;
@PostMapping(value = "/start-process")
public String startProcess(@RequestParam("userId") String userId,
@RequestParam("manager") String manager,
@RequestParam("hr") String hr) {
Map<String, Object> variables = new HashMap<>();
variables.put("userId", userId);
variables.put("manager", manager);
variables.put("hr", hr);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables);
return processInstance.getId();
}
}
在上述代码中,我们使用RuntimeService对象启动活动的“请假”流程,并在流程实例启动时将“userId”、“manager”和“hr”三个变量传递给它们。
步骤五:在浏览器中测试
现在,我们已成功的将Springboot集成activity,启动并测试了一个简单的“请假审批”流程。 在Web浏览器上运行http://localhost:8080/leave/start-process,启动流程实例并使用请求参数传递名为“userId”、“manager”和“hr”的三个变量,最终在页面中看到一个ProcessInstance ID。
我们也可以使用activity-explorer localhost:8080/flowable-ui/访问“流程引擎管理器”,并查看具体的流程实例,任务和流程定义等信息。
以上就是集成Springboot和activity的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot集成activity过程图解 - Python技术站