关于版本
Spring Boot 版本 2.6.1
Activiti 版本 7.1.0.M4
Activiti Modeler 版本 5.23.0
Activiti 5.23.0源码
Activiti 5.23.0源码
点击下载zip
activiti 相关依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M4</version>
</dependency>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0.M4</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>7.1.0.M4</version>
</dependency>
<dependency>
<groupId>batik</groupId>
<artifactId>batik-transcoder</artifactId>
<version>1.6-1</version>
<type>pom</type>
</dependency>
配置文件&Security
在配置文件中添加spring.activiti.check-process-definitions=false
由于activiti默认集成了Security,导致无法校验权限,访问页面,需要放过所有请求;创建一个配置类并继承WebSecurityConfigurerAdapter
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
}
在启动类上添加@EnableAutoConfiguration(exclude={org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
前端modeler集成
找到源码中的webapp;目录:\Activiti-5.23.0\modules\activiti-webapp-explorer2\src\main\webapp
将diagram-viewer
,editor-app
,modeler.html
拷贝到代码resources目录下static目录中
源码resources下stencilset.json
文件拷贝到代码目录resources中
接口集成
源码Activiti-5.23.0\modules\activiti-modeler\src\main\java\org\activiti\rest\editor
目录下所有内容拷贝到代码中
添加创建模板代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
public class ActivitiModelController {
@Autowired
ProcessEngine processEngine;
@Autowired
ObjectMapper objectMapper;
/**
* 创建一个空模型
* @param response
* @throws IOException
*/
@RequestMapping("/create")
public void newModel(HttpServletResponse response) throws IOException {
RepositoryService repositoryService = processEngine.getRepositoryService();
//初始化一个空模型
Model model = repositoryService.newModel();
//设置一些默认信息
String name = "new-process";
String description = "";
int revision = 1;
String key = "process";
ObjectNode modelNode = objectMapper.createObjectNode();
modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
model.setName(name);
model.setKey(key);
model.setMetaInfo(modelNode.toString());
repositoryService.saveModel(model);
String id = model.getId();
//完善ModelEditorSource
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);
repositoryService.addModelEditorSource(id,editorNode.toString().getBytes("utf-8"));
response.sendRedirect("/modeler.html?modelId="+id);
}
}
到此流程绘制组件就集成完毕
测试
启动程序,访问模板创建接口:http://localhost:8080/create
创建一个空的模型,并进入编辑界面,如下图:
在开始事件中可以添加流程事件绘制
可能遇到的问题
batik-transcoder
依赖的xerces
包,可能与项目中的包冲突,报如下错误
javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
在代码中添加,如下代码解决:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");