一、SpringBoot集成Activiti Modeler(坑已踩)
来源:互联网 发布:网络广告代理 编辑:程序博客网 时间:2024/05/23 21:42
一、集成准备
下载activiti源码及activiti-5.22.zip
源码下载
- GitHub地址,下载之后使用命令
git checkout 5.22.0-release
切换到5.22.0-release
分支 - 网盘地址
- GitHub地址,下载之后使用命令
Activiti-5.22.0.zip下载
- 官网下载, 进入之后点击
No Thanks,take me to download
即可进入下载界面。 - 网盘下载
- 官网下载, 进入之后点击
二、复制项目文件到自己的项目中
- 进入源码文件中的
modules\activiti-webapp-explorer2\src\main\webapp
目录,复制diagram-viewer
、editor-app
、modeler.html
三个文件到springboot项目中的resources目录下。(主要是前端页面) - 解压activiti-5.22.0.zip,在Activiti-5.22.0的libs中找到activiti-modeler-5.22.0-sources.jar,将其解压,将会找到以下三个类:(三个controller)
- 将以下三个类复制到自己的springboot项目的包中,只要包是位于启动类的下层包即可,这样springboot就会自动扫描到这三个类。
- 将源码路径
modules\activiti-webapp-explorer2\src\main\resources\stencilset.json
复制到springboot项目中的resources目录下。(这个文件是控制界面的语言的,附一个中文的文件下载地址stencilest.json-中文 - 至此,所有需要的文件都复制完成,接下来,我们开始配置修改。项目结构如下:
三、修改配置
1.添加依赖,并刷新项目(这是Gradle的,Maven自己转换一下)
dependencies { compile('org.activiti:activiti-spring-boot-starter-basic:5.22.0') compile("org.springframework.boot:spring-boot-starter-web") testCompile('org.springframework.boot:spring-boot-starter-test') compile('org.activiti:activiti-modeler:5.22.0') compile('commons-io:commons-io:2.5') }
2.修改springboot的启动类, 在类上加如下注解,关闭security功能。主要是因为activiti的依赖中含有spring security的jar包,所以springboot会自动配置安全功能,访问时就需要输入密码。
@EnableAutoConfiguration(exclude = { org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class, org.activiti.spring.boot.SecurityAutoConfiguration.class,})
3.修改 resources目录下的app-cfg.js, 如下更改(这个是项目的路径,springboot是不需要项目路径的,所以把项目路径删除掉)
ACTIVITI.CONFIG = { 'contextRoot' : '/service',};
4.还记得我们前面复制进来的三个类吗?
在每个类的类名上加上
RequestMapping(value = “/service”)注解。(页面会访问这个路径)
5.修改
ModelSaveRestResource
类
(不修改这个的话,在页面保存流程时会报错)
@RestController@RequestMapping(value = "/service")public class ModelSaveRestResource implements ModelDataJsonConstants { protected static final Logger LOGGER = LoggerFactory.getLogger(ModelSaveRestResource.class); @Autowired private RepositoryService repositoryService; @Autowired private ObjectMapper objectMapper; @RequestMapping(value="/model/{modelId}/save", method = RequestMethod.PUT) @ResponseStatus(value = HttpStatus.OK) public void saveModel(@PathVariable String modelId, @RequestParam("name") String name, @RequestParam("json_xml") String json_xml, @RequestParam("svg_xml") String svg_xml, @RequestParam("description") String description) {//对接收参数进行了修改 try { Model model = repositoryService.getModel(modelId); ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo()); modelJson.put(MODEL_NAME, name); modelJson.put(MODEL_DESCRIPTION, description); model.setMetaInfo(modelJson.toString()); model.setName(name); repositoryService.saveModel(model); repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8")); InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8")); TranscoderInput input = new TranscoderInput(svgStream); PNGTranscoder transcoder = new PNGTranscoder(); // Setup output ByteArrayOutputStream outStream = new ByteArrayOutputStream(); TranscoderOutput output = new TranscoderOutput(outStream); // Do the transformation transcoder.transcode(input, output); final byte[] result = outStream.toByteArray(); repositoryService.addModelEditorSourceExtra(model.getId(), result); outStream.close(); } catch (Exception e) { LOGGER.error("Error saving model", e); throw new ActivitiException("Error saving model", e); } }}
四、编写测试
新建一个controller如下
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.ProcessEngines;import org.activiti.engine.RepositoryService;import org.activiti.engine.repository.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @author kingboy--KingBoyWorld@163.com * @date 2017/8/22 下午6:00 * @desc . */@RestController@RequestMapping("/activiti")public class ActivitiController { /** * 创建模型 */ @RequestMapping("/create") public void create(HttpServletRequest request, HttpServletResponse response) { try { ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); 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); Model modelData = repositoryService.newModel(); ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, "hello1111"); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); String description = "hello1111"; modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); modelData.setMetaInfo(modelObjectNode.toString()); modelData.setName("hello1111"); modelData.setKey("12313123"); //保存模型 repositoryService.saveModel(modelData); repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8")); response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelData.getId()); } catch (Exception e) { System.out.println("创建模型失败:"); } }}
启动项目访问localhost:8080/activiti/create,看看是不是可以看到编辑页面了呢?
配置过程一定要细心,稍微不小心就会失败,其中有很多坑,慢慢解决就好
阅读全文
0 0
- 一、SpringBoot集成Activiti Modeler(坑已踩)
- springboot + activiti + modeler
- SpringMVC项目集成Activiti 5.22 Modeler
- activiti入门六(集成新版Activiti Modeler与Rest服务)
- Activiti-Modeler
- MVN工程下Spring 集成 Activiti Modeler 5.18.0
- 集成新版(5.17+)Activiti Modeler与Rest服务
- activiti学习资料(Activiti Modeler)
- Activiti Modeler学习资料
- Activiti-modeler使用
- 集成activiti-modeler 到 自己的业务系统(集成流程跟踪-完美支持IE)
- jplogic之activiti modeler流程设计器集成案例(非spring集成)
- activiti自定义流程之Spring整合activiti-modeler实例(一):环境搭建
- Activiti Modeler发布以及教程
- 整合Activiti Modeler到SpringMVC
- 整合Activiti-modeler并汉化
- 浅谈Activiti Modeler 的扩展
- 浅谈Activiti Modeler 的扩展
- linux命令记录
- Markdown 介绍
- IOS 直接选中tableView的最后一行
- test
- maven中引入ssm 常用jar包 记得之后整理
- 一、SpringBoot集成Activiti Modeler(坑已踩)
- 自定义HTML5 Video 标签
- Lingo教育版免费申请流程
- hdu-1017 A Mathematical Curiosity
- Java中线程的使用
- 【算法题】2018今日头条编程题二
- Onfocur和Onblur重复触发问题解决方案(文本框onblur事件连续触发的问题)
- 设计模式之过滤器模式
- Android进阶#(12/12)从 码农 历练成 工程师 ——综合实战_降低复杂性,MVP架构。