SpringBoot 整合Activiti(一)

最近在学习Activiti工作流,学习过程整理下,方便以后回顾。

我这里用的Activiti版本是5.22,考虑后面应该会做在线绘制流程图,而6.0版本网上信息过少。。。(如下配置6.0也可试用)

开发工具使用Eclipse,Eclipse集成Activiti可参考:https://www.cnblogs.com/mingforyou/p/5347561.html

项目目录结构如下:


1、pom.xml配置SpringBoot和Activiti5.22

<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>workFlow</groupId>
	<artifactId>workFlow</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
	</properties>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.8.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring-boot-starter-basic</artifactId>
			<version>5.22.0</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<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>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project> 
2、数据源配置(application.properties):

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/activiti?characterEncoding=utf8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

server.context-path=/workFlow
server.session.timeout=10

spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
//端口号
server.port=8081
3、绘制流程图如下:

右键以xml编辑器方式打开流程图:


文件内容:

<?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" 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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="demo2" name="My process" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="请假"></userTask>
    <userTask id="usertask2" name="审批"></userTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="130.0" y="180.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="271.0" y="170.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
        <omgdc:Bounds height="55.0" width="105.0" x="471.0" y="170.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="690.0" y="180.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="576.0" y="197.0"></omgdi:waypoint>
        <omgdi:waypoint x="690.0" y="197.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="376.0" y="197.0"></omgdi:waypoint>
        <omgdi:waypoint x="471.0" y="197.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="165.0" y="197.0"></omgdi:waypoint>
        <omgdi:waypoint x="271.0" y="197.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

新创建的流程一定记得修改流程图id如下图,如若流程图id存在重复,则启动报错:


4、java代码:

SpringBoot会把常用的服务自动配置注入,使用时直接装配使用即可:

@SpringBootApplication
public class App {
	
    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);
    }
}
@RestController
@RequestMapping("/demo")
public class DemoController {
	@Autowired  
	private RepositoryService repositoryService; 
	@Autowired  
	private RuntimeService runtimeService;  
	@Autowired  
	private TaskService taskService;  
	
	@RequestMapping("/firstDemo")
	public void firstDemo() {

		//根据bpmn文件部署流程
		Deployment deployment = repositoryService.createDeployment().addClasspathResource("demo2.bpmn").deploy();
		//获取流程定义
		ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
		//启动流程定义,返回流程实例
		ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
		String processId = pi.getId();
		System.out.println("流程创建成功,当前流程实例ID:"+processId);
		
		Task task=taskService.createTaskQuery().processInstanceId(processId).singleResult();
		System.out.println("第一次执行前,任务名称:"+task.getName());
		taskService.complete(task.getId());

		task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
		System.out.println("第二次执行前,任务名称:"+task.getName());
		taskService.complete(task.getId());

		task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
		System.out.println("task为null,任务执行完毕:"+task);
	}
解决流程图汉字乱码问题:

/**
 * 解决乱码问题
 * @author Administrator
 *
 */
@Component
public class ShareniuProcessEngineConfigurationConfigurer implements ProcessEngineConfigurationConfigurer  {
	public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
		processEngineConfiguration.setActivityFontName("宋体");
		processEngineConfiguration.setLabelFontName("宋体");
		processEngineConfiguration.setAnnotationFontName("宋体");
		System.out.println("ShareniuProcessEngineConfigurationConfigurer#############");
		System.out.println(processEngineConfiguration.getActivityFontName());
	}
}

5、执行结果:

访问http://localhost:8081/workFlow/demo/firstDemo,控制台即可得到如下结果:


后面会继续更新Activiti相关内容。

源码链接: https://pan.quark.cn/s/085fc05dd0ec 企业全面向云端迁移的IT系统实施方案 企业网络安全架构设计的完整参考资料(含253份设计拓扑图) 大型企业IT安全防护体系构建的规范总集、技术分册及管理分册全套资料 中国证券与期货行业信息安全工作实施蓝图 【实用】企业IT战略规划实操案例参考 【权威】xx集团业务流程改进及IT系统规划项目-IT架构设计详解报告-机密版(200页) 企业信息技术部门IT系统部署管理细则 华为云基础架构设计咨询服务方案七件套完整合集 北京电信企业信息化年度规划文档 某城市商业银行IT风险控制咨询文档 企业桌面虚拟化环境规划设计方案 IBM公司企业信息安全架构模型 精选IBM SOC安全运营中心规划与构建方案 IT安全风险评估管理实施手册 IT安全基准标准建立方法及实施方案 IT部门发展建设中长期规划 IT服务管理体系推行规划 IT规划方案实施教程 华为IT审计与流程治理咨询服务产品七件套 IT战略规划-系统架构设计报告 TOGAF企业架构设计方法论 XXX学院智慧校园建设规划方案 XX集团安全防御体系规划建议文档 XX政务云数据中心等保2.0安全规划文档 大型企业集团信息化发展蓝图 从企业架构视角到信息化规划,从现状分析到架构设计的核心方法论 等级保护2.0标准下企业信息安全防护系统构建方案 公司信息系统安全保障体系设计文档 国际管理咨询公司IT信息规划演示文稿 经典案例_中石油信息系统全面规划方案 企业IT技术架构设计指南 - 集团公司IT技术架构设计手册 企业IT战略规划路线图 企业IT治理机制规划方案 企业网络安全架构设计实践方案 企业整体架构规划(Oracle战略专家培训材料) 融合可信...
内容概要:本文围绕基于遗传算法的新型异构分布式系统任务调度算法展开研究,重点利用Matlab实现算法仿真与优化,深入探讨了在复杂异构环境下如何通过智能优化算法提升任务调度效率与系统整体性能。研究不仅聚焦于遗传算法的核心机制,还融合了粒子群优化(PSO)、灰狼优化(GWO)、鲸鱼优化(WOA)等多种先进智能优化算法,系统分析其在任务调度中的适应性与优越性。同时,文档拓展至电力系统优化、无人机路径规划、微电网调度、电动汽车协同等多个实际应用场景,提供了丰富的Matlab代码实例与仿真模型,涵盖从算法设计、参数调优到多目标优化的全流程技术细节,旨在为科研人员提供套完整的理论与实践指导体系。; 适合人群:具备定编程基础,熟练掌握Matlab编程语言,对智能优化算法及其在工程领域(如电力系统、自动化控制、路径规划等)应用感兴趣的科研人员、研究生及工程技术人员。; 使用场景及目标:①深入学习并复现基于遗传算法及其他群体智能算法的任务调度模型;②掌握Matlab在复杂系统建模与仿真实验中的高级应用技巧;③开展电力系统优化、无人机三维路径规划、微电网能量管理等相关课题的研究与项目开发;④通过对比多种优化算法性能,提升科研创新能力与实际问题解决能力。; 阅读建议:建议读者结合文中提供的Matlab代码进行动手实践,逐模块调试与验证算法效果,重点关注不同算法在收敛速度、全局搜索能力与稳定性方面的差异,同时参考文档中引用的顶级EI论文与硕士论文复现案例,构建系统的科研思维框架,推动自身研究工作的创新与深化。
内容概要:本文详细介绍了基于MATLAB实现的改进前推回代法在低压配电网潮流计算中的应用,针对传统算法在复杂分支网络中收敛性差的问题,通过优化算法结构提升了计算效率与稳定性。文中结合具体配电网络案例,展示了该方法的仿真流程与结果分析,并进步融合KPCA(核主成分分析)故障检测技术,实现对系统异常工况的识别,通过T2和Q统计指数的可视化增强状态监测能力。资源包含完整的MATLAB代码与仿真模型,涵盖潮流计算、故障诊断与数据可视化等多个环节,适用于电力系统分析、优化调度及智能运维等研究方向。; 适合人群:具备电力系统基础理论知识和MATLAB编程能力,从事电力工程、能源系统优化、智能电网监控等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①解决低压配电网潮流计算中传统方法收敛困难的问题,提升仿真精度与效率;②结合KPCA实现配电网运行状态的实时监测与故障早期预警;③为硕士论文、科研项目及电力系统优化课题提供可复现的算法框架与代码支持。; 阅读建议:建议读者结合文中提供的MATLAB代码与仿真模型,按照章节顺序系统学习,重点关注前推回代法的迭代逻辑、KPCA降维与故障检测的实现步骤,以及T2和Q统计量的计算与绘图方法,同时关注公众号“荔枝科研社”获取完整资料与更新内容,以便深入掌握算法细节并进行二次开发。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 测试用例的制定是软件开发过程中的核心步骤,它保障了产品的品质以及功能的稳定性。本文将详细分析测试用例的构建框架以及个具体的登录功能测试用例。 测试用例的构建框架通常由以下几个部分构成: 1. **项目/软件名称**:以“项目/软件技术出口合同网络申领系统 (企业端)程序版本1.0.25”为例,它界定了测试的范围和目标应用软件。 2. **功能模块名**:例如“Login”,标明了我们正在检验登录功能。 3. **编制人**:负责制定测试用例的人员,这有助于责任追踪和团队沟通。 4. **用例编号**:比如“TC-TEP_Login_1”,这提供了独特的识别码,便于管理和追踪测试过程。 5. **编制时间**:2002.10.12,记录了用例创建的时间点,有助于进行版本管理。 6. **相关的用例**:此处未提及,但在实际操作中可能存在其他关联的测试用例。 7. **功能特性**:具体描述了要测试的功能,如“用户身份验证”。 8. **测试目的**:明确了测试的目标,如验证合法信息的输入,允许合法登录,以及阻止非法登录。 9. **预置条件**:在执行测试前需要满足的条件,这里提到“无特殊规程说明”。 10. **规程说明**:可能涉及系统配置、数据准备等,此处未详细列出,但可能参考了“需求说明中关于‘登陆’的说明”。 11. **测试数据**:包含不同情况下的输入数据,如用户名和密码的组合。 12. **操作步骤**:详细描述了每个测试步骤,包括用户交互和系统预期行为。 13. **期望结果**:每个步骤的预期输出,显示了系统在正常情况下的响应。 14. **实际结果**:...
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值