springboot整合activiti

本文详细介绍了如何在SpringBoot项目中整合Activiti流程引擎,包括必要的Maven依赖配置、application.properties设置以及启动类注解排除。同时,解决了常见错误如ArrayStoreException和SQLSyntaxErrorException,并提供了数据库连接配置的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入jar包,完整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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>Activity</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Activity</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<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>5.22.0</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>5.22.0</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</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-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

2.application.properties文件

#编码格式
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
#activiti
#自动检查、部署流程定义文件
spring.activiti.check-process-definitions=true
#自动更新数据库结构
spring.activiti.database-schema-update=true
 #流程定义文件存放目录
spring.activiti.process-definition-location-prefix=classpath:/processes/ 
#流程文件格式
spring.activiti.process-definition-location-suffixes=
#数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


3.启动类

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class ActivityApplication {

	public static void main(String[] args) {
		SpringApplication.run(ActivityApplication.class, args);
	}

}

4.遇到的问题

  • org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.activiti.spring.boot.SecurityAutoConfiguration’: Initialization of bean failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    去掉org.activiti.spring.boot.SecurityAutoConfiguration类,如下图
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)

  • class path resource [processes/] cannot be resolved to URL because it does not exist
    将spring.activiti.check-process-definitions=false改为false,或者在resource下创建processes文件夹
  • Caused by: java.sql.SQLSyntaxErrorException: Table ‘activiti.act_ge_property’ doesn’t exist
    添加
    nullCatalogMeansCurrent=true
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
  • nested exception is java.lang.NoClassDefFoundError: javax/el/ELResolver
    activiti jar包要保持一致
<think>好的,我现在需要帮助用户了解如何在Spring Boot项目中集成和使用Activiti工作流引擎。用户要求提供教程、示例代码和最佳实践。首先,我应该回顾已有的知识,并查看提供的引用内容,确保回答准确。 首先,根据引用[1],Activiti与Spring整合需要配置pom.xml文件,引入相关依赖。引用[4]中的示例代码展示了Spring Boot的配置,包括数据库连接和Activiti的配置参数。引用[5]提到了一个完整的Spring Boot和Vue项目,集成了在线编辑器和工作流功能,这可能涉及流程定义的位置和权限设置。 接下来,我需要组织回答的结构。用户可能需要步骤式的指导,所以分成几个部分:环境准备、配置、流程定义、服务层实现、最佳实践和相关问题。 在环境准备部分,需要列出必要的依赖,比如Spring Boot Starter、Activiti Spring Boot Starter,以及数据库驱动,如MySQL。同时,要确保用户知道在pom.xml中添加这些依赖。 然后是配置部分,根据引用[4]的YAML配置示例,需要说明如何配置数据源和Activiti参数,比如database-schema-update和process-definition-location-prefix。这些参数的作用需要解释清楚,例如自动创建表结构和指定流程文件的位置。 流程定义部分需要指导用户如何创建BPMN文件,可能使用在线设计器或插件。引用[5]提到在线流程编辑器,可能需要引用这一点,并建议用户使用Activiti提供的工具来设计流程图。 服务层实现部分,需要展示如何启动流程实例和查询任务。示例代码可以参考标准的Activiti API调用,比如使用RuntimeService和TaskService。同时,提醒用户处理事务管理,可能需要使用@Transactional注解。 最佳实践部分需要结合引用内容。例如,流程版本管理(引用[4]中的database-schema-update),流程监控(引用[5]的流程图跟踪),表单集成(引用[5]的表单关联),以及扩展性(引用[3]的REST API配置)。同时,权限控制(引用[5]的工作流权限设置)也是重要的一环。 相关问题部分要根据用户可能的问题生成,比如性能优化、表单集成方式、REST API整合、版本控制等,这些在引用中都有涉及。例如,引用[3]讨论了REST API的配置,引用[5]提到了表单集成,引用[4]涉及版本控制。 需要注意所有数学表达式使用$...$,但在这个问题中可能较少涉及数学内容,不过如果有变量或代码中的符号,需要正确使用。例如,数据库URL中的变量可能需要用代码块而非数学格式。 最后,确保回答引用正确的来源,比如引用[4]中的配置代码,引用[5]中的功能说明,引用[3]的REST API配置步骤。引用标识要自然添加在相关段落末尾。 需要检查是否所有引用都被正确使用,没有遗漏关键点。例如,数据库配置、流程定义位置、版本管理、REST API整合等都是用户可能需要的关键信息。同时,示例代码要准确,配置参数要正确,比如history-level设置成full,这样记录完整的审批历史。 可能还需要提醒用户关于事务管理和生产环境中的注意事项,比如不要使用database-schema-update: true在生产环境,而是使用更严格的策略。此外,流程文件的存放位置和权限控制也是实际开发中需要注意的地方。 总结来说,回答需要结构清晰,分步骤说明整合过程,提供示例代码和配置,引用相关的最佳实践,并生成相关问题引导用户进一步学习。</think>以下是在Spring Boot项目中集成Activiti工作流引擎的完整指南,包含配置示例、代码实现和最佳实践: ### 一、环境准备与基础配置 1. **添加依赖** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. **配置数据源与参数**(引用[4]) ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/activiti_db driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root activiti: database-schema-update: true # 自动创建/更新表结构 check-process-definitions: true process-definition-location-prefix: classpath:/processes/ history-level: full # 记录完整历史 ``` ### 二、流程定义开发 1. **创建BPMN流程图** ```xml <!-- src/main/resources/processes/leave-approval.bpmn20.xml --> <process id="leaveApproval" name="请假审批流程"> <startEvent id="start"/> <userTask id="leaderAudit" name="直属领导审批"/> <exclusiveGateway id="decisionGateway"/> <sequenceFlow sourceRef="start" targetRef="leaderAudit"/> <sequenceFlow sourceRef="leaderAudit" targetRef="decisionGateway"/> <!-- 其他节点... --> </process> ``` 2. **使用在线设计器**(引用[5]) 通过`/activiti-app`路径访问Activiti自带的Web流程设计器,支持可视化流程配置和权限设置 ### 三、服务层实现 ```java @Service public class LeaveService { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Transactional public String startProcess(LeaveRequest request) { Map<String, Object> variables = new HashMap<>(); variables.put("days", request.getDays()); ProcessInstance instance = runtimeService.startProcessInstanceByKey( "leaveApproval", variables); return instance.getId(); } public List<Task> getUserTasks(String userId) { return taskService.createTaskQuery() .taskCandidateUser(userId) .list(); } } ``` ### 四、最佳实践 1. **流程版本管理**(引用[4]) - 通过`activiti:database-schema-update`控制数据库更新策略 - 生产环境建议设置为`false`,使用FlyDB或Liquibase管理数据库变更 2. **流程监控与跟踪**(引用[5]) ```java // 获取流程实例历史记录 HistoryService historyService = processEngine.getHistoryService(); HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery(); List<HistoricProcessInstance> instances = query.processInstanceId(instanceId).list(); ``` 3. **表单集成方案**(引用[5]) - 使用动态表单或外置表单系统 - 通过`<activiti:formProperty>`绑定业务数据 - 支持驳回任意节点、会签/或签等高级功能 4. **扩展性设计**(引用[3]) ```java // 配置REST API支持 @Bean public RestResponseFactory restResponseFactory() { return new RestResponseFactory(); } ``` ### 五、调试与部署 1. **启动时自动部署流程**(引用[4]) ```yaml activiti: check-process-definitions: true process-definition-location-prefix: classpath:/processes/ ``` 2. **访问管理控制台** 通过`/activiti-admin`路径访问管理界面,支持流程监控和任务管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值