Activiti-5.18.0与springMvc项目集成和activiti-explorer单独部署Web项目并与业务数据库关联方法
Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activi。。。

Activiti⼯作流框架学习笔记(⼆)之springboot2.0整合⼯作流Activi。
以前在⼯作当中做过不少与⼯作流Activiti有关的⼯作,当时都是spring集成activiti5.22的项⽬,现在回过头去看,其实版本已经稍微⽼了,因此,基于先前的⼯作经验,决定⽤较新版本的技术来重新梳理下以前接触过的技术。
决定⽤springboot2.0+Activiti6.0来做实践总结。
第⼀步,在springboot项⽬pom.xml⽂件引⼊相关依赖:1<!--Activiti ⼯作流-->2<dependency>3<groupId>mysql</groupId>4<artifactId>mysql-connector-java</artifactId>5<scope>5.1.35</scope>6</dependency>78<dependency>9<groupId>org.activiti</groupId>10<artifactId>activiti-spring</artifactId>11<version>6.0.0</version>12</dependency>1314<dependency>15<groupId>com.fasterxml.jackson.core</groupId>16<artifactId>jackson-core</artifactId>17<version>2.9.5</version>18</dependency>第⼆步,建⽴Activiti的配置类1 @Configuration2 public class Activiticonfig {34 /**5 * 流程实例类,启动流程时创建6 * @return7 */8 @Bean9 public ProcessEngine processEngine(){10 ProcessEngineConfiguration pro=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();11 pro.setJdbcDriver("com.mysql.jdbc.Driver");12 pro.setJdbcUrl("jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC&nullCatalogMeansCurrent=true");13 pro.setJdbcUsername("root");14 pro.setJdbcPassword("root");15 //避免发布的图⽚和xml中⽂出现乱码16 pro.setActivityFontName("宋体");17 pro.setLabelFontName("宋体");18 pro.setAnnotationFontName("宋体");19 pro.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);20 return pro.buildProcessEngine();21 }222324 /**25 * 仓库服务类,⽤于管理bpmn⽂件与流程图⽚26 * @return27 */28 @Bean29 public RepositoryService repositoryService(){30 return processEngine().getRepositoryService();31 }3233 /**34 * 流程运⾏服务类,⽤于获取流程执⾏相关信息35 * @return36 */37 @Bean38 public RuntimeService runtimeService(){39 return processEngine().getRuntimeService();40 }4142 /**43 * 任务服务类,⽤户获取任务信息44 * @return45 */46 @Bean47 public TaskService taskService(){48 return processEngine().getTaskService();49 }505152 /**53 * 获取正在运⾏或已经完成的流程实例历史信息54 * @return55 */56 @Bean57 public HistoryService historyService(){58 return processEngine().getHistoryService();59 }6061 /**62 * 流程引擎的管理与维护63 * @return64 */65 @Bean66 public ManagementService managementService(){67 return processEngine().getManagementService();68 }6970 /**71 * 创建、更新、删除,查询群组和⽤户72 * @return73 */74 @Bean75 public IdentityService identityService(){76 return processEngine().getIdentityService();77 }7879 }在springboot⼯程⾥简单加完这些配置后,启动项⽬,原以为可以正常⽣成Activi6.0⼯作流⾃带的28张表,但这时出现了⼀堆错误:### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'example.act_ge_property' doesn't exist ### The error may exist in org/activiti/db/mapping/entity/Property.xml### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline### The error occurred while setting parameters### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?### Cause: java.sql.SQLSyntaxErrorException: Table 'example.act_ge_property' doesn't exist出现这种问题主要是因为MySql的版本问题,在连接mysql的url后边加⼀个&nullCatalogMeansCurrent=true即可解决。
SpringCloud整合Activiti过程中的踩坑记录

SpringCloud整合Activiti过程中的踩坑记录⽬录前⾔错误⼀:shiro与serurity冲突处理:在启动类屏蔽SpringSecurity处理:更换版本7.1.0.M4及以下错误⼆:与mybatis冲突处理:注释包中的MyBatis关于idea插件总结前⾔最近需要⽤到⼯作流,选择了Activiti,刚开始配置起来并没有很顺利。
记录⼀下希望对读者们有帮助。
先来看我这边项⽬的环境:主要为JDK1.8,SpringbBoot2.3.5,MyBatis-Plus3.3.2,MySql8.0.21,Shiro1.5.3,idea 2019.3<java.version>1.8</java.version><spring.cloud.version>Hoxton.SR9</spring.cloud.version><spring.boot.version>2.3.5.RELEASE</spring.boot.version><ali.cloud.version>2.2.1.RELEASE</ali.cloud.version><ali.druid.version>1.1.13</ali.druid.version><mybatis.plus.version>3.3.2</mybatis.plus.version><mysql.version>8.0.21</mysql.version><shiro.version>1.5.3</shiro.version>关于Activiti的配置⽂件,在nacos中管理yml数据库参数配置⽂件spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://locahost:3306/activiti_test?useUnicode=true&characterEncoding=UTF-8username: developerpassword: developerinitial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000activiti配置⽂件spring:activiti:#1.flase:默认值。
Activiti与Spring Boot的项目开发

Activiti 与Spring Boot 的项目开发工作流AcTIviTI6 电子书:
工作流AcTIviTI6 教学视频:
Activiti 与Spring BootSpring Boot 项目简介
开发一个全新的项目,需要先进行开发环境的搭建,例如要确定使用的技
术框架、确定框架的版本,还要考虑各个框架之间的版本兼容问题,完成这
些繁琐的工作后,还要对新项目进行配置,测试能否正常运行,最后才将搭
建好的环境提交给项目组的其他成员使用。
经常出现的情形是,表面上已经
成功运行,但部分项目组成员仍然无法运行,项目初期浪费大量的时间做这
些工作,几乎每个项目都会投入部分工作量来做这些固定的事情。
受Ruby On Rails、Node.js 等技术的影响,JavaEE 领域需要一种更为简便的开发方式,来取代这些繁琐的项目搭建工作。
在此背景下,Spring 推出了Spring Boot 项目,该项目可以让使用者更快速的搭建项目,使用者可以更专注、快速的投入到业务系统开发中。
系统配置、基础代码、项目依赖的jar。
activiti在项目使用过程中常见的问题

activiti在项目使用过程中常见的问题Activiti是一款广泛应用的开源工作流引擎,它提供了一套完整的工作流解决方案,可以用于处理和管理复杂的业务流程。
在项目使用过程中,可能会遇到一些常见的问题,本文将介绍一些这些问题及解决方法。
一、环境搭建问题:1.1数据库配置问题:Activiti支持多种数据库,如MySQL、Oracle等。
在使用Activiti时,需要按照官方文档的说明,正确配置数据库连接信息。
如果遇到数据库连接失败的问题,可以检查数据库的访问权限和网络连接是否正常。
1.2 Activiti版本兼容性问题:在使用Activiti时,需要选择合适的版本。
如果使用了不兼容的版本,可能会出现部分功能无法正常使用或出现异常。
因此,在选择版本时,需要仔细查看官方文档,并根据实际需求选择合适的版本。
1.3网络环境问题:Activiti的运行需要依赖网络环境。
如果网络环境不稳定或存在故障,可能会导致Activiti无法正常工作。
此时,可以尝试重启网络设备或更换网络环境,以保证网络的稳定性。
二、流程定义问题:2.1流程图绘制问题:在绘制流程图时,需要使用Activiti提供的设计器或其他工具。
绘制过程中可能会遇到界面冻结、无法保存等问题。
如果遇到这些问题,可以尝试更新设计器或使用其他工具进行流程图的绘制。
2.2流程节点配置问题:在定义流程时,需要给每个节点配置相应的属性和监听器。
如果节点配置不正确,可能会导致流程无法正常运行或出现异常。
因此,在配置节点时,需要仔细查看节点的属性要求,并遵循官方文档的指导进行配置。
2.3流程变量传递问题:在流程中,可能需要传递一些参数或数据。
如果传递的参数或数据不正确,可能会导致流程无法正常运行或出现错误。
此时,可以通过调试代码或查看日志来排查问题,并确认参数或数据是否正确传递。
三、流程执行问题:3.1流程启动问题:在启动流程时,可能会遇到流程启动失败或无法找到流程定义的问题。
activiti原理

activiti原理
activiti是一个基于Java语言的开源工作流引擎,可以快速地构建流程管理、任务分配、权限审批等各种业务流程。
activiti的原理主要包括以下几个方面:
1. BPMN标准:activiti采用了BPMN(Business Process Model and Notation)标准来描述流程,BPMN是一种图形化的业务流程建模语言,用于描述业务流程中的活动、事件、网关、任务等元素,支持流程的可视化建模,提高了业务流程的可读性和可理解性。
2. 工作流引擎:activiti包含了一个工作流引擎,用于管理流程执行过程中的各种状态、流转、事件等。
工作流引擎主要由三个部分组成:流程引擎、任务引擎和历史引擎。
流程引擎负责解析BPMN 模型、驱动流程的执行;任务引擎负责处理任务的分配、完成、撤销等操作;历史引擎负责记录流程的历史信息,包括流程实例、任务、变量等。
3. 事件机制:activiti采用了事件机制来实现流程的监听和扩展。
事件机制允许用户在流程执行过程中注册监听器,在流程中发生指定的事件时触发监听器执行相应的操作,比如发送邮件通知、执行自定义的逻辑等。
4. Spring框架:activiti支持与Spring框架集成,可以使用Spring来管理activiti的bean对象,简化了配置和使用的难度。
同时,Spring提供了很多有用的功能,如事务管理、AOP等,可以更好地管理和控制activiti的执行过程。
总的来说,activiti的原理主要是基于BPMN标准的流程描述和工作流引擎的控制,同时支持事件机制和Spring框架的集成,使得activiti具备了高度的可扩展性和灵活性,可以满足不同场景下的流程管理需求。
spring整合activiti-modeler5.16

Spring整合activiti-modeler5.16一、整合基础:eclipse4.4.1、tomcat7、jdk1.7、mysql5.6.25、maven3.2.5、activiti5.16.3、spring4.0.9二、步骤:1、下载activiti-5.16.3.zip: /download.html2、解压zip文件,解压后的目录打开如下:3、打开上图中wars,可看到如下:4、把上图中的api、editor、explorer、libs复制到项目的webapp下,如图:5、进入第三步所示的WEB-INF的classes目录,可看到如图:6、把上图中的editor.html、stencilset.json、plugins.xml复制到项目的src/main/sources中,(spring.xml是自己建立的)如图:7、配置web.xml文件,整个文件内容如下:<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID"version="2.5"><filter><description>字符集过滤器</description><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFil ter</filter-class><init-param><description>字符集编码</description><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>RestletServlet</servlet-name><servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class> <init-param><param-name>org.restlet.application</param-name><param-value>org.activiti.rest.editor.application.ModelerRestApplicat ion</param-value></init-param></servlet><servlet-mapping><servlet-name>RestletServlet</servlet-name><url-pattern>/service/*</url-pattern></servlet-mapping><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</ser vlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><welcome-file-list><welcome-file>activiti.html</welcome-file><welcome-file>activiti.htm</welcome-file><welcome-file>activiti.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>8、使用maven导入需要的pring、activiti以及mysql的jar包。
activiti源码解读 并加中文注释

为了更好地理解和使用Activiti工作流引擎,我们有必要对其源码进行深入的解读和学习。
在本文中,我们将针对Activiti工作流引擎的源码进行解读,并添加中文注释,以便读者可以更好地理解其原理和实现。
一、Activiti工作流引擎概述1.1 概述Activiti是一个轻量级的工作流引擎,它实现了BPMN 2.0规范,并提供了丰富的API和工具,方便开发人员进行流程设计、部署和执行。
1.2 应用场景Activiti广泛应用于企业中的各种业务流程,如审批流程、请假流程、报销流程等,通过Activiti可以实现流程的自动化和规范化,提高工作效率和质量。
1.3 核心特性Activiti工作流引擎具有以下核心特性:- 支持BPMN 2.0规范,可以对复杂的业务流程进行建模和执行;- 提供了丰富的API和工具,方便开发人员进行流程管理和监控;- 支持分布式部署,可以满足高并发、高可用的业务需求。
二、Activiti源码解读2.1 模块解析Activiti源码主要包括以下几个模块:- activiti-engine:工作流引擎的核心实现,包括流程定义、流程实例、任务管理等;- activiti-bpmn-converter:BPMN 2.0规范的解析和转换;- activiti-rest:RESTful API的实现;- activiti-spring:与Spring框架的集成;- ...2.2 核心类解析Activiti工作流引擎的核心类包括ProcessEngine、RepositoryService、RuntimeService、TaskService等,这些类负责流程定义、流程执行、任务管理等核心功能的实现。
2.3 核心流程解析Activiti工作流引擎的核心流程包括流程定义、流程部署、流程执行等,这些流程通过一系列的核心类和接口进行协同工作,并最终实现业务流程的自动化和规范化。
2.4 核心算法解析Activiti工作流引擎的核心算法包括流程的解析、执行和监控,这些算法通过一系列的数据结构和设计模式进行实现,保证了工作流引擎的高性能和可靠性。
springboot集成activiti工作流时容易出现的问题

springboot集成activiti⼯作流时容易出现的问题No.1启动报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name'org.activiti.spring.boot.SecurityAutoConfiguration': Initialization of bean failed; nested exception is ng.ArrayStoreException:sun.reflect.annotation.TypeNotPresentExceptionProxy;解决办法:启动类上加上@SpringBootApplication(exclude = SecurityAutoConfiguration.class)即可;因为activiti-spring-boot-starter-basic中引⽤了spring-boot-starter-security(具体没研究)。
No.2启动报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springProcessEngineConfiguration' defined in class path resource [xxxxx/xxxx/xxx.java]: Bean instantiation via factory method failed; nested exception isorg.springframework.beans.BeanInstantiationException: Failed to instantiate [org.activiti.spring.SpringProcessEngineConfiguration]: Factory method 'springProcessEngineConfiguration' threw exception; nested exception is java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist;意思是在resource下没有找到processes⽂件夹;解决办法:在resource⽬录下添加processes⽂件夹,并且⽂件夹不能为空或是在application.yml⽂件中加上如下配置(注意是spring节点下)activiti:database-schema-update: true# ⾃动部署验证设置:true-开启(默认)、false-关闭check-process-definitions: false;No.3启动报错org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'runtimeServiceBean' defined in class path resource [com/example/config/ActivitiConfig.class]: Unsatisfied dependency expressed through method 'runtimeServiceBean' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name'processEngine': FactoryBean threw exception on object creation; nested exception is ng.IllegalArgumentException: jdbcUrl is required with driverClassName.解决办法:配置数据源时url前加上jdbc-;如:jdbc-url: jdbc:mysql://localhost:3306/activity?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Activiti-5.18.0与springMvc项目集成和activiti-explorer单独部署Web项目并与业务数据库关联方法Double_AutoEE2015-10-151.下载Activiti-5.18.0进入Ativiti官网:/download.html点击Activiti-5.18.0.zip进行下载2.解压Activiti-5.18.0.zip3.添加Activiti所需jar包到自己的项目工程复制libs目录下的所有jar包到自己的工程目录lib下进入activiti-5.18.0\wars目录,解压activiti-explorer.war进入activiti-5.18.0\wars\activiti-explorer\WEB-INF\lib目录,复制如下jar包到自己的工程目录lib下⏹jackson-annotations-2.2.3.jar⏹jackson-core-2.2.3.jar⏹jackson-databind-2.2.3.jar⏹joda-time-2.6.jar有时还需要如下jar包,可以自己下载⏹gwt-dev-windows.jar⏹gwtext-2.0.5.zip4.在springMvc配置文件中添加Activiti相关配置在自己工程springMvc配置文件,如spring-mvc-mybatis.xml中添加Activiti相关配置,如下:<!--加载activiti引擎--><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration"/></bean><!--dataSource为自己已经定义好的数据源,transactionManager为自己已经定义好的事务管理器--><bean id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration"><property name="dataSource" ref="dataSource" /><property name="transactionManager" ref="transactionManager" /><property name="databaseSchemaUpdate" value="true" /><property name="jobExecutorActivate" value="false" /></bean><!--activiti的各种服务接口--><bean id="repositoryService" factory-bean="processEngine"factory-method="getRepositoryService" /><bean id="runtimeService" factory-bean="processEngine"factory-method="getRuntimeService" /><bean id="taskService" factory-bean="processEngine"factory-method="getTaskService" /><bean id="historyService" factory-bean="processEngine"factory-method="getHistoryService" /><bean id="managementService" factory-bean="processEngine"factory-method="getManagementService" />5.使用Activiti经过以上配置,即可在自己的工程中使用Activiti,进行工作流的相关操作可以通过main方法进行对应测试,如下:public static void main(String[] args) {ApplicationContext context = newClassPathXmlApplicationContext("spring-mvc-mybatis.xml");ProcessEngineprocessEngine = (ProcessEngine) context.getBean("processEngine");//部署流程RepositoryServicerepositoryService = processEngine.getRepositoryService();Deployment deployment =repositoryService.createDeployment().addClasspathResource("studentAskOffProcess2.b pmn").deploy();//启动流程启动流程使用流程定义中的process id="studentAskOffProcess"RuntimeServiceruntimeService = processEngine.getRuntimeService();ProcessInstanceprocessInstance =runtimeService.startProcessInstanceByKey("studentAskOffProcess");//取得任务接口TaskServicetaskService = processEngine.getTaskService();//查询流转到accountancy 的任务List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("fuxs").list();Task task = null;System.out.println("tasks.size() = " + tasks.size());for (inti = 0; i<tasks.size(); i++) {task = tasks.get(i);System.out.println("task = " + task.getId() + "-" + task.getName());}//完成任务plete(task.getId());tasks = taskService.createTaskQuery().taskCandidateUser("admin").list();System.out.println("tasks.size() = " + tasks.size());for (inti = 0; i<tasks.size(); i++) {task = tasks.get(i);System.out.println("task = " + task.getId() + "-" + task.getName());}}6.部署activiti-explorer在eclipse中新建一个web工程,工程名为activiti-explorer进入activiti-explorer.war解压后的activiti-5.18.0\wars\activiti-explorer目录,复制全部内容,粘贴到工程activiti-explorer中的WebContent目录下,如下:将mysql的驱动jar包mysql-connector-java-5.1.27.jar复制到web-INF的lib目录中,并添加到工程编译路径下修改目录WebContent\WEB-INF\classes\目录中的数据库配置文件db.properties,将数据库配置改完自己的mysql数据库,使activit-explorer可以访问自己的业务数据库,如下:在eclipse中添加tomcat7 服务器,将工程activiti-explorer部署到服务器中,如下:启动tomcat7 服务器,启动成功后在浏览器中访问http://localhost:8080/activiti-explorer/,显示activiti-explorer登陆界面(IE浏览器显示会有问题,最好使用火狐浏览器或其他显示没有问题的浏览器)。
输入用户名Kermit和密码Kermit进行登陆,进入操作界面点击【流程】图标,显示自带的demo流程,如自己在前通过eclipse创建过流程,也会显示出来,因为读取的是自己的业务数据库点击【流程设计工作区】,可以新建流程模板并进行部署点击【新建流程】,录入流程名称和描述,进入流程编辑界面,既可进行在线流程编辑,操作简单方便。
以上通过activiti-explorer实现在线流程设计,并将业务工程和流程设计工程分离,减少对业务工程的侵入,通过activiti-explore流程设计和部署后,在业务工程中即可对流程进行操作。