SpringBoot整合Activiti6系列
约 836 字大约 3 分钟
2025-11-05
1、资源文档
参考文档 => 看云Activiti6工作流系统搭建教程
百度网盘资源 => 密码: 1e8a
# 自行下载源码和流程设计器、或者提取网盘avtiviti-study>activiti-5.22.0 => 网盘en.json、stencilset.json这两个汉化文件要下载
https://github.com/Activiti/Activiti/releases/download/activiti-5.22.0/activiti-5.22.0.zip
https://github.com/Activiti/Activiti/archive/refs/tags/activiti-5.22.0.zip2、整合Activiti6(依赖使用activiti-spring-boot-starter-basic)
| Spring Boot Version | Activiti Version | activiti-modeler Version |
|---|---|---|
| 2.3.12.RELEASE | 6.0.0 | 5.22.0 |
2.1、创建一个springboot应用并添加依赖
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<activiti.version>6.0.0</activiti.version>
<knife4j.version>2.0.9</knife4j.version>
<batik.version>1.17</batik.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-parser</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-transcoder</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-codec</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-css</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-svg-dom</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-svggen</artifactId>
<version>${batik.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>2.2、配置文件
# activiti settings
spring.activiti.database-schema-update=true
spring.activiti.check-process-definitions=false
spring.activiti.db-history-used=true
spring.activiti.history-level=FULL
# knife4j settings
knife4j.enable=true
knife4j.setting.enableFooter=false
knife4j.setting.enableFooterCustom=true
knife4j.setting.footerCustomContent=Activiti6工作流管理接口文档server:
port: 8090
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/activiti6?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
username: root
password: root2.3、应用启动类
@SpringBootApplication(exclude = {org.activiti.spring.boot.SecurityAutoConfiguration.class})
public class ActivitiApplication {
private static final Logger logger = LoggerFactory.getLogger(ActivitiApplication.class);
public static void main(String[] args) {
// SpringApplication.run(ActivitiApplication.class, args);
StopWatch stopWatch = new StopWatch();
stopWatch.start();
ConfigurableApplicationContext context = new SpringApplicationBuilder(ActivitiApplication.class).logStartupInfo(false).run(args);
stopWatch.stop();
ServerProperties serverProperties = context.getBean(ServerProperties.class);
Integer port = serverProperties.getPort();
ServerProperties.Servlet servlet = serverProperties.getServlet();
String contextPath = servlet.getContextPath();
String urlSuffix = StringUtils.isEmpty(contextPath) ? String.valueOf(port) : port + contextPath;
logger.info("Activiti-SERVER 服务启动完成,耗时:{}s, 应用接口服务请访问: http://127.0.0.1:{} ", stopWatch.getTotalTimeSeconds(), urlSuffix);
logger.info("Activiti-SERVER 服务启动完成,耗时:{}s, 文档接口服务请访问: http://127.0.0.1:{} ", stopWatch.getTotalTimeSeconds(), urlSuffix+"/doc.html");
logger.info("Activiti-SERVER 服务启动完成,耗时:{}s, 工作流应用服务访问: http://127.0.0.1:{} ", stopWatch.getTotalTimeSeconds(), urlSuffix+"/activiti/modeler.html?modelId=1");
logger.info("Activiti-SERVER 所用Activiti版本: {}, 模型设计器版本: {} ", "6.0.0", "5.22.0");
}
}3、添加模型设计器资源
3.1、添加静态资源到项目src/main/resources/static/activiti下面


3.2、添加Java文件资源到项目controller/activiti/modeler下面

3.3、添加汉化文件en.json、stencilset.json
src/main/resources/stencilset.json
src/main/resources/static/activiti/editor-app/i18n/en.json
3.4、修改文件
# src/main/resources/static/activiti/editor-app/app-cfg.js
ACTIVITI.CONFIG = {
'contextRoot' : '/activiti',
};
# src/main/resources/static/activiti/editor-app/configuration/toolbar-default-actions.js => 379行
$http({ method: 'POST',
# controller/activiti/modeler/ModelEditorJsonRestResource.java
# controller/activiti/modeler/ModelSaveRestResource.java
# controller/activiti/modeler/StencilsetRestResource.java
@RequestMapping(value="/activiti/model/{modelId}/save")
# @RequestMapping加上前缀'/activiti', 其中ModelSaveRestResource修改方法为 method = RequestMethod.POST4、编写创建模型的方法
@Autowired
private RepositoryService repositoryService;
@ApiOperation("创建模型")
@PostMapping("/create")
public Result create(String modelName, String modelKey, String description) {
try {
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorNode.put("stencilset", stencilSetNode);
ObjectNode modelNode = objectMapper.createObjectNode();
modelNode.put(MODEL_NAME, modelName);
modelNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
description = StringUtils.defaultString(description);
modelNode.put(MODEL_DESCRIPTION, description);
Model newModel = repositoryService.newModel();
newModel.setMetaInfo(modelNode.toString());
newModel.setName(modelName);
newModel.setKey(StringUtils.defaultString(modelKey));
repositoryService.saveModel(newModel);
repositoryService.addModelEditorSource(newModel.getId(), editorNode.toString().getBytes(StandardCharsets.UTF_8));
return Result.success("创建模型成功", newModel.getId());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 获取模型ID用于访问 => newModel.getId()5、访问Activiti6模型设计器
http://127.0.0.1:8090/activiti/modeler.html?modelId=1
6、更多信息(参考文档)
https://www.kancloud.cn/gaoyipeng/garnett/1966039
