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。
activiti学习文档-ext-js

dActiviti工作流引擎目录Activiti工作流引擎 (1)一、Spring整合Activiti工作流引擎 (1)二、Activiti查询部署流程列表 (8)三、Extjs自动部署:批处理+Ant Build (14)四、Extjs MVVN视图 (16)五、Activiti部署流程资源 (20)六、Activiti流程资源查看 (26)七、Activiti流程删除 (29)八、初始化流程引擎用户及角色分组 (30)九、流程引擎用户登录和登出 (34)十、简单请假流程实现 (41)一、Spring整合Activiti工作流引擎1.pom.xml依赖顺序在spring 依赖后面增加Activiti的依赖,因为Activiti5.22.0默认依赖Spring4.1.5如果使用spring版本高于Spring4.1.5则需要声明在Activiti之前,否则导致spring版本冲突。
<properties><jdk.version>1.7</jdk.version><groovy.version>2.4.3</groovy.version><spring.version>4.3.7.RELEASE</spring.version><aspectj.version>1.7.4</aspectj.version><hibernate.version>5.1.5.Final</hibernate.version><mysql-connector.version>5.1.41</mysql-connector.version><spring-data-jpa.version>1.11.3.RELEASE</spring-data-jpa.version><log4j.version>1.2.17</log4j.version><slf4j.version>1.7.25</slf4j.version><jackson.version>2.8.8</jackson.version><junit.version>4.12</junit.version><jsp-api.version>2.2</jsp-api.version><servlet-api.version>3.0-alpha-1</servlet-api.version><activiti.version>5.22.0</activiti.version></properties><dependencies><!--================spring start================--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><!--spring 与 activiti整合注意jar版本冲突问题,建议spring配置在activiti之前--> <!--================spring end================--><!--================AOP aspectj start================--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency><!--================AOP aspectj end================--><!--================hibernate start================--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><!--================hibernate end================--><!--================spring-data-jpa start================--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>${spring-data-jpa.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><!--================spring-data-jpa end================--><!--================mysql connector start================--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector.version}</version></dependency><!--================mysql connector end================--><!--================activiti start================--><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><!--<dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>${activiti.version}</version></dependency>--><!--activiti与spring整合支持库--><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>${groovy.version}</version></dependency><!--================activiti end================--><!--================log4j+slf4j start================--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!--================log4j+slf4j end================--><!--================test start================--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!--================test end================--></dependencies><build><finalName>activiti-demo-01</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>${jdk.version}</source><target>${jdk.version}</target></configuration></plugin></plugins></build>2.增加src\main\resources\applicationContext-orm.xml配置文件<!--1.spring提供的jdbc.datasource 轻量级比较适合测试 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"value="com.mysql.jdbc.Driver"/><property name="url"value="jdbc:mysql://localhost:3306/oa?useUnicode=true&characterEncoding=utf8"/> <property name="username"value="root"/><property name="password"value="root"/></bean><!--2.配置Jpa的EntityManagerFactory--><bean id="hibernateJpaVendorAdapter"class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource"ref="dataSource"/><property name="jpaVendorAdapter"ref="hibernateJpaVendorAdapter"/><property name="packagesToScan"value="com.demo.entity"></property><property name="jpaProperties"><props><prop key="eUnicode">true</prop><prop key="hibernate.connection.characterEncoding">UTF-8</prop><prop key="hibernate.connection.pool_size">1</prop><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop><!--<prop key="hibernate.enable_lazy_load_no_trans">true</prop><prop key="hibernate.max_fetch_depth">0</prop>--></props></property></bean><!--3.配置事务管理 --><tx:annotation-driven/><bean id="transactionManager"class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory"ref="entityManagerFactory"/></bean><jpa:repositories base-package="com.demo.dao"/>3.增加src\main\resources\applicationContext-activiti.xml配置文件<!-- Activiti引擎配置 --><bean id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="processEngineName"value="spring"></property><property name="dataSource"ref="dataSource"/><property name="transactionManager"ref="transactionManager"/><property name="databaseSchemaUpdate"value="true"/><property name="jobExecutorActivate"value="false"/><!--<property name="deploymentResources" value="classpath*:/ bpmn /leave.zip"></property>--><!-- 自动部署资源 --><!-- <property name="deploymentResources" value="classpath*:/bpmn/**/*.bpmn"></property> --><!-- <property name="deploymentResources" value="classpath*:/bpmn/**/*.zip "></property> --> </bean><!-- Activiti引擎工厂只可以使用默认名称processEngine --><bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"><property name="processEngineConfiguration"ref="processEngineConfiguration"/> </bean><!-- Activiti的Service --><bean id="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/><bean id="taskService"factory-bean="processEngine"factory-method="getTaskService"/><bean id="runtimeService"factory-bean="processEngine"factory-method="getRuntimeService"/><bean id="formService"factory-bean="processEngine"factory-method="getFormService"/><bean id="identityService"factory-bean="processEngine"factory-method="getIdentityService"/> <bean id="historyService"factory-bean="processEngine"factory-method="getHistoryService"/><bean id="managementService"factory-bean="processEngine"factory-method="getManagementService"/>RepositoryService服务。
工作流Activit介绍与应用

工作流Activiti介绍与应用工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。
我的理解就是:将部分或者全部的工作流程、逻辑让计算机帮你来处理,实现自动化。
1Activiti简介Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。
它实现了BPMN 规范,可以发布设计好的流程定义,并通过api进行流程调度。
1.1Activiti基础编程框架Activiti的基础编程框架如下:Activiti基于Spring,ibatis等开源中间件作为软件平台,在此之上构建了非常清晰的开发框架。
上图列出了Activiti的核心组件。
:流程引擎的抽象,对于开发者来说,它是我们使用Activiti的外观(fa?ade),通过它可以获得我们需要的一切服务。
(TaskService,RuntimeService,RepositoryService...):Activiti按照流程的生命周期(定义,部署,运行)把不同阶段的服务封装在不同的Service中,用户可以非常清晰地使用特定阶段的接口。
通过ProcessEngine能够获得这些Service实例。
1.2Activiti重要服务类ProcessEngine:流程引擎的抽象,通过它我们可以获得我们需要的一切服务。
RepositoryService: Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如 XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中。
RepositoryService提供了对 repository 的存取服务。
TaskService:在Activiti业务流程定义中每一个执行节点都被称作一个Task,流程运行过程中,与每个任务节点相关的接口,比如complete, delete,delegate等等都是TaskService提供的。
企业管理系统开发平台

企业管理系统开发平台①孙道兵, 田苏梅, 施元超, 刘晓光(上海航天控制技术研究所, 上海 201109)通讯作者: 田苏梅摘 要: 本文以企业人力资源管理系统应用为背景, 阐述了一套企业管理系统开发平台, 该平台支持可持续开发, 系统具有良好的伸缩性、可扩展性、可移植性. 首先重点描述了系统开发平台技术方案, 并对该平台的先进性进行详细分析; 然后结合企业实际业务需求, 对在该开发平台基础上搭建人力资源管理系统进行了描述, 着重阐述了考勤管理中考勤计算规则及实现示例; 通过该系统的平稳运行, 验证了通过该系统开发平台可以模块化、高效快速的开发项目, 能够适应复杂业务及需求变化, 具有广泛的推广应用价值.关键词: 系统开发平台; J2EE; 人力资源管理; 考勤管理引用格式: 孙道兵,田苏梅,施元超,刘晓光.企业管理系统开发平台.计算机系统应用,2021,30(5):134–142. /1003-3254/7927.htmlEnterprise Management System Development PlatformSUN Dao-Bing, TIAN Su-Mei, SHI Yuan-Chao, LIU Xiao-Guang(Shanghai Aerospace Control Technology Institute, Shanghai 201109, China)Abstract : On the basis of the application of enterprise-oriented human resource management systems, we design a system development platform for enterprise management. Specifically, the platform supports sustainable development and the developed system has good scalability, expansibility, and portability. First, the technical solution of the proposed platform is emphatically described, and the advanced nature of the platform is analyzed in detail. Then, in combination with the actual business needs of the enterprises, the human resource management system built on this platform is described and the attendance calculation rules and implementation examples in attendance management are emphatically elaborated.Finally, through the smooth operation of the system, it is verified that the system development platform can develop projects in a modular, efficient, and rapid manner and adapt to complex business and demand changes, having broad promotion and application value.Key words : system development platform; J2EE; human resource management; attendance management1 引言上海某院某研究所是拥有两千多名员工的航天大所, 员工组成成分复杂, 人力资源管理业务多样, 涉及面广, 人员及其岗位、职位变化频繁, 业务逻辑复杂,业务数据种类繁多, 业务人员日常需要花费大量的时间和精力来处理各种纷繁复杂的业务过程和数据. 而且单位内并没有一个系统能够完整实现人力资源管理相关业务管理的信息化, 当前手工业务管理模式效率低下, 容易出错, 不利于大量历史数据的统计汇总分析,不便于为领导层提供好的决策依据. 同时, 尽管市场上成熟的人力资源管理系统数量比较多, 但是与本单位管理需求差异较大, 不能很好的适应本单位人员管理计算机系统应用 ISSN 1003-3254, CODEN CSAOBNE-mail: Computer Systems & Applications,2021,30(5):134−142 [doi: 10.15888/ki.csa.007927] ©中国科学院软件研究所版权所有.Tel: +86-10-62661041① 收稿时间: 2020-09-28; 修改时间: 2020-10-21; 采用时间: 2020-11-03; csa 在线出版时间: 2021-04-28134的特殊性.基于此, 集合人力资源部、信息技术部门的管理和技术力量, 自主构建管理系统开发平台, 该平台支持可持续开发, 系统具有良好的伸缩性、可扩展性、可移植性. 并基于此平台实现人力资源管理业务, 提高工作效率, 提升人力资源管理业务水平, 为高层决策提供高质量的人力资源数据.2 企业管理系统开发平台2.1 平台概述基于当前业界先进的Spring+ SpringMVC+ Hibernate 开源技术自主构建JavaEE开发平台.系统开发平台支持可持续开发, 系统具有良好的伸缩性、可扩展性、可移植性.平台采用B/S多层架构, 提供良好的用户体验, 集成Activiti5流程引擎, 支撑企业信息管理的业务流程,同时基于Apache CXF服务框架构建服务模块, 满足系统集成要求及面向未来的服务架构.2.2 技术方案运用Spring、SpringMVC、Hibernate框架建立了平台基础, 并在其中集成了Activiti5流程引擎, Apache CXF服务基础框架、spring-quartz定时任务调度. 技术框架如图1所示.图1 系统平台技术架构基于JQuery EasyUI前端框架技术实现前端展示,面向HTML5技术, 兼容主流浏览器.基于Servlet3规范的模块化设计, 应用RESTful 结构, 统一接口规则.创建基于Web的远程部署、管理控制台使开发人员、系统管理员与生产环境完全隔离, 结合数据加密技术, 既保证了敏感数据安全, 又提高了部署、管理效率.数据库管理系统采用Oracle 11g R2以上版本.2.3 平台创新性分析2.3.1 多元主体权限管理模型创新设计了多元主体权限管理模型, 结合Spring 拦截器技术设计了系统平台的访问控制与权限管理系统内核. 这个授权系统解决了传统系统仅可进行单一用户授权的问题, 可从用户、组织机构、岗位、党政职务、型号职务等多维度授权. 登录认证通过后, 查询该用户的授权信息, 即角色、菜单功能、许可操作集合.图2中的“角色对象”它负责建立主体与角色之间关系, 这个关系有3个要素: 角色、主体对象、对象类别.要素“角色”是系统中角色实例; 要素“主体对象”是主体的实例, 是向某角色中分配的对象; 要素“对象类别”描述主体对象的分类, 在关系中用来识别主体对象, 从而我们可以采用相应的算法取得主体关联的用户集合.图2 多元主体权限管理模型示意图(1) 实体对象及关系设计权限管理涉及到众多实体, 有两个主要的实体关联:① 通过“角色对象关联表”建立角色与主体对象的关系;② 通过“角色功能树关联表”建立角色与权限的关系.实体关系图如图3所示.实体表有: 系统用户表、组织机构、职务信息、岗位信息、用户组对象.员工与用户是一对一关系;员工与组织机构是多对多关系, 即一个组织机构可有多个员工, 员工可在多个组织机构任职;员工与岗位是多对多关系, 即一个岗位可有多个员工, 员工可在多个岗位上担任某个职务;2021 年 第 30 卷 第 5 期计算机系统应用135临时项目组或特殊的人员组合, 设为用户组, 与用户是多对多关系.角色对象关联表是 “角色对象”的关系数据库二维表具体形式, 它关联角色表及各主体实体表.例如: “中层干部”角色中分配了“部长”、“副部长”、“主任”、“副主任”这几个对象, 人力资源的员工岗位职务信息中员工A 、员工B 及员工C 通过职务关联被间接“分配”至“中层干部”角色, 通过系统用户表得到用户A 、用户B 及用户C, 当给角色“中层干部”授予某种权限时, 即实现对应给用户A 、用户B 及用户C 授予了相应权限. 同样“用户及终端管理”角色中分配了“信息中心”这个“组织机构”, 示例的数据表明用户X,用户Y 实际分配于这一角色, 当管理员给“信息中心”这个角色授予某种权限时即实现了给用户X, 用户Y 授权.图3 多元主体权限管理实体关系图(2) 权限验证通过Spring 框架拦截器(interceptor)机制实现所有访问URL 的权限验证处理. 用户登录后会话对象中保存的“用户角色、菜单功能、许可操作集合”授权信息作为本处理的输入. 权限控制活动如图4所示.① 获取登录用户所关联的角色, 包括: 用户对象分配的角色 + 用户关联的组织岗位分配的角色 + 用户所在组织机构及其所有上级组织机构分配的角色.② 从角色功能关联表查询用户、用户组织机构、用户所在岗位关联的角色、这些角色所关联的功能及计算机系统应用2021 年 第 30 卷 第 5 期136其操作集合.③ 将用户角色、菜单功能、许可操作集合保持在用户会话对象中, 用于验证用户访问操作URL 的合法性、限制访问资源的范围.获职方法注解 @Auth 的属性 needCheck是 @Auth (needCheck=false)允许访问允许访问允许访问允许访问无 @Auth (needCheck=false)检验用户会话,是否合法认证用户拒绝访问拒绝访问否取得访问 URLURL 核对拦截器配置, 是否属例外 URL是否授权菜单 URL是否授权操作 URL是是是图4 权限控制活动图2.3.2 代码及报表自动生成在平台效率方面, 该平台创新设计了基于数据物理模型的实体代码生成工具. 基于元数据的代码自动生成功能, 避免重复的机械的工作, 按照统一的规范生成实体类, 并具有自动化在线表单页面设计、自动化报表设计功能.(1) 自动生成代码连接到数据源, 自动获取到全部数据表, 选择数据表, 创建模型.通过freemarker 模板自动生成代码. 自动生成的代码包括: 列表界面、新增界面、查看界面、审核界面、controller 控制器、service 接口及service 实现代码、实体类. 目前平台设置的模板列表如图5所示.图5 模板列表(2) 自动化报表设计编写SQL 语句后, 自动解析出数据列, 然后对每个数据列进行展示维护. 创建成功后, 自动生成访问的URL 地址. 对用户分配该报表地址, 进行报表查询展示. 自动化报表设计功能界面如图6所示.图6 报表设计3 人力资源管理系统设计与实现3.1 功能描述为提高人力资源管理业务工作质量, 提高工作效率, 做好决策依据, 有必要将以往大量重复的业务活动利用现代化的信息技术手段进行管控, 通过建立业务信息的关联模型, 使业务数据的管理自动化、智能化,从而大幅度消减业务人员的重复劳动, 提高工作效率,提升人力资源管理业务水平, 为高层决策提供高质量的人力资源数据.通过该系统平台搭建的人力资源管理系统, 提供了人力资源管理的数据管理、业务管理以及数据展示功能[1–13]. 系统功能框架图如图7所示.(1) 数据管理能力主要实现了人力资源数据的信息化管理功能, 并2021 年 第 30 卷 第 5 期计算机系统应用137作为其他应用系统的基础数据. 建立组织机构、员工信息开放式服务, 供其他系统调用, 同时向注册系统发布组织机构、员工信息变更信息. 具体包括以下功能模块:① 组织管理: 实现组织机构设置、职位管理、岗位管理, 按岗位说明书建立岗位体系; 按照“单位-部门-岗位”实现对组织的信息化管理.② 人员配置: 实现人与岗位的对应, 包括减员、增员、员工信息、试用/见习管理、内部调动等功能.③ 劳动合同管理: 实现了合同签订、变更、续签、解除记录的查询及相关管理、提醒功能.④ 领导干部管理: 实现行政干部职务信息、任免职管理、考核情况登记等功能.⑤ 型号干部管理: 实现技术干部职务信息、任免职管理等功能.⑥ 档案信息管理: 实现员工个人基本信息的登记、变动、查询等功能.(2)业务管理能力主要实现了在人力资源数据信息的基础上, 结合各项人力资源管理业务流程, 开展具体的应用[14,15]. 具体包括以下功能模块:① 绩效管理: 实现了可以按部门管理也可以面向项目定制的绩效考核管理, 以及360度评估、量化考核等功能.② 薪酬管理: 实现了面向部门领导的薪酬发放功能和面向员工个人的查询功能.③ 考勤管理: 实现了考勤的外部数据导入、统计管理、实时假期控制、请假处理、出勤记录查询等功能, 并对出勤数据进行统计分析.④ 培训管理: 实现了培训需求上报、培训计划汇总、培训评价、培训资源管理、培训费用统计、培训档案记录等管理功能.⑤ 招聘管理: 实现了根据岗位空缺发布信息制定招聘计划的功能.(3)数据展示能力具体包括: 报表中心, 主要实现了基于上述模块和不同应用者的权限的各种报表统计、分析、展示、查询功能.本文后续将详细介绍其中的考勤管理模块的设计与实现.图7 人力资源管理系统功能架构3.2 考勤管理全所员工出勤存在多种刷卡状态, 有各类请假、请假后又出勤、工作日历设置也可变、有部分员工公假、企业特殊时段假等, 为了应对这种复杂多变的出计算机系统应用2021 年 第 30 卷 第 5 期138勤情况, 保证每个员工考勤记录正确, 设计了考勤日志计算引擎, 计算出每个员工每天的出勤状态值及文字表述. 在这些数据基础上, 提供了各类考勤状态查询、综合统计分析. 考勤管理模块用例图如图8所示.图8 考勤管理用例图3.2.1 请假申请及查询利用activiti 框架, 实现了员工在线办理请假申请审批流程.各类请假, 在同一时间只能有一类有效的请假信息. 按部门、请假员工工号、请假姓名拼音、请假类型、起止查询日期执行查询, 实现了各类角色分级查询功能.请假时间计算规则:(1)事假、病假、市内公出请假起止时间记录单位精确到分, 请假时间计算: 计量单位为小时, 不包括非工作日, 采用四舍五入原则计算;(2)带薪休假请假起止时间记录单位精确到天, 请假时间计算不包括非工作日;(3)产前假、哺乳假请假起止时间记录单位精确到小时, 请假时间计算不包括非工作日, 且每天最多请1小时;(4)其余公假类中请假类型请假起止时间记录单位精确到天, 请假时间计算包括工作日和非工作日.事假、病假、工伤假、带薪休假请假人为单人,其余请假类型请假人可多选.3.2.2 刷卡记录读取考勤机上的原始刷卡记录, 并依据考勤刷卡时间, 计算异常类别. 具体计算规则如下:(1)读取系统设置的上班时间, 下班时间;(2)上班时间容忍一分钟: 上班时间 + 1分钟, 上班迟到: 30分钟(系统可设置), 下班早退: 30分钟(系统2021 年 第 30 卷 第 5 期计算机系统应用139可设置);(3)首先判断今天是否需要出勤, 如果否, 则不计算; 如果是, 则计算.进所时间和出所时间相同, 表示单次打卡或者未打卡, 出勤状态为“缺勤”;进所时间 > = 上班容忍时间 && 进所时间 < 上班迟到, 出勤状态为“迟到”;出所时间 >= 下班早退 && 出所时间 < 下班时间,出勤状态为“早退”;进所时间 >= 上班迟到 && 出所时间 <= 下班早退, 出勤状态为“上下班缺勤”;进所时间 >= 上班迟到, 出勤状态为“上班缺勤”;出所时间 > 进所时间, 且出所时间 <= 下班早退,出勤状态为“下班缺勤”;进所时间 < 上班容忍时间 && 出所时间 > 下班时间, 出勤状态为“正常出勤”.3.2.3 考勤统计考勤统计分析以考勤数据为基础, 对个人、部门考勤数据进行汇总统计, 分为: 个人考勤信息、部门考勤汇总和出勤统计分析. 考勤统计分析数据权限设计原则: 个人考勤信息对普通员工开放查询权限, 部门考勤汇总和出勤统计分析, 对领导及具有该菜单功能权限的角色用户进行开放查询.个人考勤信息: 以日历卡片形式显示员工每月每日的考勤状态. 默认显示系统当月的考勤状态, 可切换年或月显示不同月份的考勤日志显示考勤刷卡进出所时间. 界面展示如图9所示.图9 个人考勤信息界面(1)显示刷卡记录进所时间~出所时间, 时间格式: HH24: MI.(2)显示考勤状态出勤、缺勤n 小时、某种假n 小时、迟到、早退、刷卡异常.(3)显示假日及特殊工作日若是异常刷卡, 显示“说明”按钮, 点击此按钮可发起刷卡异常说明流程.若有缺勤, 显示“补假”按钮, 点击此按钮可发起请假流程, 传递缺勤的时间, 为2补假提供方便.(4)显示统计项目年度带薪休假日数、年度已公休日数、年度事假累计(小时)、当月事假累计(小时)、年度公出累计(小时)、当月公出累计(小时)、当月迟到早退累计(次)、当月缺勤累计(小时) .部门考勤汇总: 以表格方式汇总出部门考勤. 界面示意图如图10所示.图10 部门考勤汇总点击员工姓名, 可以进行穿透查询, 查询该员工的刷卡记录及考勤日志明细信息. 左侧“组织机构”根据用户角色显示相应权限内的数据, 右侧上部默认组织机构内的全部一级部门考勤汇总数据; 右侧下部显示选中的组织机构内, 人员的考勤汇总信息. 点击一级部门后, 右侧上部显示该一级部门内各个二级部门考勤汇总数据, 右侧下部显示选中的组织机构内, 人员的考勤汇总信息.出勤统计分析: 以图形界面直观的展示全所出勤情况. 出勤统计分析界面如图11所示.点击一级部门柱状图, 可以进行穿透查询, 查询其子部门的出勤图形统计; 点击二级部门柱状图, 可以进行穿透查询, 该部门每个员工日出勤明细及图形统计.出勤时间统计计算部门人均日均出勤时间, 计算公式如下:指定期间内:计算机系统应用2021 年 第 30 卷 第 5 期140(1)个人每天出勤时间 = 该员工计算对象日的刷卡时间差 + 该员工计算日的公假; 单位为“分钟”; 若刷卡时间差>480 且 刷卡时间差 <= (480+30) 记为 480分(即8小时); 刷卡时间差>(480+30), 则刷卡时间差 = 刷卡时间差−30;(2)个人日均出勤时间 = 个人每天出勤时间之和/指定期间内工作日历工作日日数/60; 单位为“小时”, 小数点后保留2位, 四舍五入;(3)部门人均日均出勤时间 = (部门内每个人的个人日均出勤时间之和) / 部门内总人数; 单位为“小时”,小数点后保留1位, 四舍五入.图11 出勤统计分析3.3 权限管理(1)菜单功能及操作注册对URL 路径地址进行注册登记, 如图12所示.图12 配置菜单及操作(2)角色分配创建角色, 并分配对象, 如图13所示.(3)权限分配指定角色, 分配对应的菜单及操作, 如图14所示.4 结语企业信息管理的数字化、信息化、规范化是增强企业核心竞争力的关键环节. 人力资源管理系统支撑了人力资源管理全线业务, 大大提高了人力资源管理工作效率. 在满足业务流程的同时, 积累了大量有用的数据, 基于这些数据支撑了人员效能分析, 优化了人员配置, 提供的综合统计分析结果, 为企业决策提供了依据. 同时这些数据将为建立企业大数据分析提供基础数据. 通过人力资源管理系统的建设, 也验证了系统开发平台运行稳定、具有可扩展性、可维护性, 能够支撑人力资源管理业务. 通过该系统开发平台可以模块化、高效快速开发项目, 适应复杂业务及需求变化, 具有广泛推广应用价值.图13 创建角色图14 权限分配参考文献张明亮. 基于J2EE 的人力资源管理系统设计与实现. 软件工程, 2019, 22(9): 20–22,16. [doi: 10.19644/ki.issn2096-1472.2019.09.006]1Sun LJ, Wang SJ, Wang YL. Research and application basedon J2EE software architecture of web application system testing methods. Proceedings of 2016 International Conference on Robots & Intelligent System. Zhangjiajie,China. 2016. 289–291.2Chen MF. Design and implementation of ERP system basedon J2EE trading company. Proceedings of the 2017 9th International Conference on Measuring Technology and Mechatronics Automation. Changsha, China. 2007. 53–56.32021 年 第 30 卷 第 5 期计算机系统应用141Wang ZW. A development and configuration framework of web information system based on JavaEE. Proceedings of 2014 IEEE International Conference on Granular Computing.Noboribetsu, Japan. 2014. 316–319.4张翔, 席奇. 基于J2EE的分布式系统开发的关键技术. 电子技术与软件工程, 2018, (19): 52.5杨恩雄. Activiti实践. 北京: 机械工业出版社, 2015.6陈路路, 周凤. 一种协同的柔性Activiti5引擎设计. 计算机技术与发展, 2017, 27(3): 48–51.7李修云. 基于Activiti框架的在线审批流程应用研究. 计算机科学, 2016, 43(S1): 555–557.8沈满, 赵嵩正, 刘婧. 依据角色权限的审批工作流模型构建. 计算机工程与应用, 2013, (4): 235–239.9陈晨, 王梦彤. 一种指纹考勤机数据管理系统的设计与开10发. 计算机应用与软件, 2016, 33(12): 30–33. [doi: 10.3969/j.issn.1000-386x.2016.12.008]袁翔. 基于J2EE的综合系统核心支撑平台的设计. 计算机应用, 2013, 33(S2): 259–262.11桑一梅, 韩霞. 基于RBAC模式的人力资源管理系统的开发. 科技创新与应用, 2019, (29): 90–91.12朱丹丹. 浅析JAVA语言的开发平台及J2EE编程技术. 信息通信, 2015, (11): 126–127. [doi: 10.3969/j.issn.1673-1131.2015.11.071]13刘晓绘. 基于B/S模式的人力资源管理系统的设计与实现[硕士学位论文]. 成都: 电子科技大学, 2012.14徐尧洋. 简论ERP人力资源管理系统在企业中的应用. 信息通信, 2018, (5): 172–173. [doi: 10.3969/j.issn.1673-1131.2018.05.085]15计算机系统应用2021 年 第 30 卷 第 5 期142。
工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解

工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解Spring和Activiti的整合:在Spring和Activiti的整合中ProcessEngineFactoryBean成为了两者的整合点。
ProcessEngineFactoryBean为org.activiti.spring.ProcessEngineFactoryBean。
提供了ProcessEngine的配置和创建的功能。
<beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineC onfiguration">...</bean><bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"> <propertyname="processEngineConfiguration"ref="processEngineConfiguration"/></bean>如果在包含事物的activiti配置如下:<beans xmlns="/schema/beans"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd"><!-- 采用spring的数据源类创建一个数据源--><beanid="dataSource"class="org.springframework.jdbc.datasource.SimpleDriverDataS ource"><property name="driverClass"value="org.h2.Driver"/><property name="url"value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"/> <property name="username"value="sa"/><property name="password"value=""/></bean><!-- 创建一个事物管理器--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSource TransactionManager"><property name="dataSource"ref="dataSource"/></bean><!-- 创建一个流程引擎的配置对象--><beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineC onfiguration"><property name="dataSource"ref="dataSource"/><property name="transactionManager"ref="transactionManager"/><!-- 设置数据库schema的更新方式--><property name="databaseSchemaUpdate"value="true"/><!-- 是否启动jobExecutor --><property name="jobExecutorActivate"value="false"/></bean><!-- 创建一个流程引擎bean --><bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"> <propertyname="processEngineConfiguration"ref="processEngineConfiguration"/></bean><!-- 创建activiti提供的各种服务--><!-- 工作流仓储服务--><beanid="repositoryService"factory-bean="processEngine"factory-method="getReposit oryService"/><!-- 工作流运行服务-->id="runtimeService"factory-bean="processEngine"factory-method="getRuntimeS ervice"/><!-- 工作流任务服务--><beanid="taskService"factory-bean="processEngine"factory-method="getTaskService"/ ><!-- 工作流历史数据服务--><beanid="historyService"factory-bean="processEngine"factory-method="getHistoryServ ice"/><!-- 工作流管理服务--><beanid="managementService"factory-bean="processEngine"factory-method="getMan agementService"/><!-- 工作流唯一服务--><beanid="IdentityService"factory-bean="processEngine"factory-method="getIdentitySer vice"/>...工作流中Expressions的使用在使用spring的SpringProcessEngineConfiguration时,如果没有beans属性表示所有bean都可以暴露给activiti的流程文件xml访问。
activiti入门六(集成新版activitimodeler与rest服务)

activiti入门六(集成新版Activiti Modeler与Rest服务)目前activiti提供的Activiti Modeler有两套,从Activiti5.17后,发布了新的Activiti Modeler组件。
本文主要介绍如何在项目中集成最新的Activiti Modeler.新版的效果相比于上一版,个人感觉更加的简洁,优美。
并且在Activiti5.20后,完善了很多上版本的bug。
Activiti Modeler内部的实现上还是以oryx为图形组件为内核,用angular.js作为界面基本元素的基础组件以及调度oryx的API。
Activiti explorer的集成方式首先,从github下载Activiti源码.在第一章已经列出具体地址:https:///Activiti/ActivitiActiviti Exploer的内部结构-Java├── assembly├── java│ └── org│ └── activiti├── resourc es│ └── org│ └── activiti└── webapp├── META-INF├── VAADIN│ ├── themes│ └── widgetsets├── WEB-INF├── diagram-viewer│ ├── images│ └── js└── editor-app├── configuration├── css├── editor├── fonts├── i18n├── images├── libs├── partials├── popups└──stencilsets12345678910111213141516171819202122232 4252627我们需要关注的目录是webapp/editor-app,以及java/org/activiti新版的Activiti Explorer放弃了XML方式的配置,采用Bean configuration的方式代替。
activiti工作流使用手册

activiti工作流使用手册一、简介activiti是一个轻量级的Java开源工作流引擎,广泛应用于各类企业应用系统中。
本手册旨在为用户提供一份全面的activiti工作流使用指南,帮助用户快速上手并灵活应用activiti工作流。
二、安装与配置1. 下载activitiactiviti官网提供最新的稳定版本下载,在官网下载页面选择合适的版本,并解压到指定目录。
2. 导入activiti库在项目中导入activiti库,可以使用Maven或其他依赖管理工具,或者手动导入activiti相关的jar包。
3. 配置数据库activiti使用数据库来存储工作流相关的数据,需要配置数据库连接信息。
在项目的配置文件中,根据使用的数据库类型,配置相应的数据源。
4. 配置activiti核心引擎在项目的配置文件中,配置activiti核心引擎。
可以配置引擎的缓存设置、任务执行器等参数,以满足具体业务需求。
三、工作流定义1. 设计流程图使用activiti提供的流程图设计器,或者其他工具设计流程图。
流程图应包含各个环节、任务和流程流转条件。
2. 定义流程根据设计好的流程图,使用activiti提供的API编写Java代码来定义流程。
流程定义包括流程的启动、流程实例的创建、任务分配等。
四、工作流执行1. 启动流程使用activiti提供的API,启动流程实例。
根据流程定义的启动条件,可以设置流程实例的变量、业务参数等。
2. 处理任务根据流程的执行情况,系统将生成一系列待处理的任务。
使用activiti提供的API,查询并处理这些任务。
任务的处理包括任务的审批、任务的分派、任务的执行等。
3. 流程流转处理任务后,根据任务处理结果,流程会自动流转到下一个环节,或者根据设置的流转条件,执行流程中的分支和合并。
5. 监控流程在流程的执行过程中,可以使用activiti提供的监控工具,实时查看流程的执行情况,包括流程实例的状态、任务的处理情况、历史记录等。
Spring和activiti进行整合过程解析

Spring和activiti进⾏整合过程解析⼀、整合原理activiti的配置⽂件本⾝就是⼀个spring的配置⽂件,但默认情况下只讲ProcessEngineConfiguration作为⼀个bean来使⽤,调⽤ProcessEngines.getDefaultProcessEngine()加载的就是配置⽂件中的这个bean。
和spring整合后就可以把bean的管理让spring来进⾏,在代码中获取任意的bean。
activiti提供了⼀个spring模块,在⼀个spring⼯程中引⼊这个模块就能够整合<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>5.22.0</version></dependency>并且引⼊这个依赖后就不需要再单独引⼊activiti的依赖了,这⾥边已经包含了⼆、整合步骤2.1 新建⼀个maven⼯程并导⼊相关依赖<dependencies><!--spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>5.22.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>这⾥导⼊了spring,activiti,数据库驱动等依赖。
SpringBoot整合Activiti案例

SpringBoot整合Activiti案例1.Spring整合Activiti步骤⼀:导⼊依赖<!--activiti常规依赖--><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>7.0.0.Beta1</version></dependency><!--activiti和Spring整合依赖--><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.0.0.Beta1</version></dependency><!--数据库依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!--单测依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.7.RELEASE</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--数据源--><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!-- https:///artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>步骤⼆:配置Activiti配置内容:1.数据源 2.配置processEngine对象 3.配置XXXXService<!--数据源--><bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--配置ProcessEngineConfiguration--><bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"><!--数据源--><property name="dataSource" ref="dataSource"/><!--配置事务--><property name="transactionManager" ref="transactionManager"/><!--数据⽣成策略 true false create drop-create --><property name="databaseSchemaUpdate" value="true"/></bean><!--配置ProcessEngine--><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"><property name="processEngineConfiguration" ref="processEngineConfiguration"/></bean><!--配置RepositoryService--><bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/><!--配置RuntimeService--><bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/><!--配置TaskService--><bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/><!--配置HistoryService--><bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/><!--配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/></bean>步骤三:测试Activiti@RunWith(SpringJUnit4ClassRunner.class) //测试⽅式 junit4.12+@ContextConfiguration("classpath:activiti-spring.xml") //配置public class ActivitiSpringTest {@Resourceprivate RepositoryService repositoryService;@Resourceprivate RuntimeService runtimeService;/*** 测试流程部署*/@Testpublic void deployment(){repositoryService.createDeployment().addClasspathResource("amedical/medical.bpmn").name("测试Spring流程部署").deploy();}}2.Activiti7的新特性ProcessRuntimeTaskRuntaime3.SpringBoot2整合Activiti7步骤⼀:引⼊依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version></parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https:///artifact/org.activiti/activiti-spring-boot-starter --> <dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.0.0.Beta2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency>步骤⼆:配置⽂件spring:datasource:url: jdbc:mysql://localhost:3306/activiti-y2170?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTusername : rootpassword : rootdriver-class-name: com.mysql.jdbc.Driveractiviti:db-history-used: true步骤三:将SpringSecurity配置添加到项⽬当中SecurityUtil.java 关于权限登陆DemoApplicationConfiguration 关于权限配置步骤四:启动⼯程@SpringBootApplicationpublic class StartActiviti {public static void main(String[] args) {SpringApplication.run(StartActiviti.class,args);}}注意问题:1.Activiti7和SpringSecurity耦合,需要加⼊SpringSecurity的依赖和配置,我们可以使⽤Security中的⽤户⾓⾊组定义流程执⾏的组2.流程默认可⾃动部署,但是需要再resources/processes⽂件夹,将流程⽂件放⼊当中3.默认历史表不会⽣成,需要⼿动开启配置4.执⾏流程@RestController@RequestMapping("/activiti")public class ActivitiController {@Resourceprivate ProcessRuntime processRuntime;@Resourceprivate TaskRuntime taskRuntime;@Resourceprivate SecurityUtil securityUtil;/*** 查询流程定义*/@RequestMapping("/getProcess")public void getProcess(){//查询所有流程定义信息Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));System.out.println("当前流程定义的数量:"+processDefinitionPage.getTotalItems());//获取流程信息for (ProcessDefinition processDefinition:processDefinitionPage.getContent()) {System.out.println("流程定义信息"+processDefinition);}}/*** 启动流程⽰例*/@RequestMapping("/startInstance")public void startInstance(){ProcessInstance instance = processRuntime.start(ProcessPayloadBuilder.start().withProcessDefinitionKey("demo").build());System.out.println(instance.getId());}/*** 获取任务,拾取任务,并且执⾏*/@RequestMapping("/getTask")public void getTask(){securityUtil.logInAs("salaboy"); //指定组内任务⼈Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));if(tasks.getTotalItems()>0){for (Task task:tasks.getContent()) {System.out.println("任务名称:"+task.getName());//拾取任务taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());//执⾏任务plete(plete().withTaskId(task.getId()).build()); }}}}。
流程开发Activiti与SpringMVC整合实例

流程开发Activiti与SpringMVC整合实例流程(Activiti)流程是完成⼀系列有序动作的概述。
每⼀个节点动作的结果将对后⾯的具体操作步骤产⽣影响。
信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电⼦流提现较为明显。
⼀般的步骤为:①申请者发起申请。
②各级领导审批。
⼀般由低级别往⾼级别审批。
③每⼀级别审批结果将影响或者决定申请结果。
若下⼀节点⾮结束节点,此节点若审批通过将转给下⼀节点审批;若此节点审批不通过此次审批将被驳回修改申请或者直接结束。
图1 流程图实例④当流程审批结束或者中途某节点审批不通过,在达到结束节点时,可以根据具体审批结果进⾏相关的业务操作。
如通过审批进⾏虚拟机资源分配;没通过审批则不予以分配。
业务场景:完成某业务需经过多个步骤处理且每个步骤处理⼈或处理⼈⾓⾊不同。
流程优势:①业务逻辑容易理解。
流程的执⾏逻辑和纸上办公层级审批⼀致,可以轻松设计出适合各业务的流程实例。
②使⽤灵活。
流程在配置时,可以在执⾏过程中动态的将某个节点指定给具体⼈或者具有某种⾓⾊的⼈(某部门⼈员)。
若指定的是具体的某⼈,则该⼈员登陆后即可查看到⾃⼰相关的任务进⾏直接办理;若指定的含有某⾓⾊的⼈,则含有该⾓⾊的⼈登陆后都能查看到该任务,可以根据个⼈情况,选择性的对某条审批进⾏签收后进⾏审批。
③与代码低耦合在不是⽤流程⽽采⽤传统if else判断也可实现流程功能,但相对⽽⾔操作较为复杂,代码量较多,尤其是在后期逻辑较复杂情况下,需要增加审批节点或者修改现有逻辑,将会造成⼤量的改动,且不易于测试,容易产⽣未知bug。
流程的引⼊将有效规避上述问题。
流程本⾝提供了众多接⼝以便⽤户使⽤,同时可以根据具体业务需要进⾏有效扩展。
可以在较少代码量基础上实现相同的业务功能。
设计流程时也相对简单,通过拖拽配置即可完成。
所有流程⽅法都可共⽤,不同流程根据流程名字进⾏区分,仅在流程启动时⽤于判断,待启动后所有流程操作都⼀样。
springboot整合activiti

springboot整合activiti 1.第⼀步添加bpmn⽂件得插件,不然没法查看和编辑bpmn⽂件,添加插件的⽅法各⾃百度即可,很简单2.安装好bpmn插件后开始新建bpmn⽂件,也就是画流程图⼀般是在代码中进⾏指定流程审批⼈的,我这⾥只做⼊门案例3.添加pom依赖这⾥包含了在线设计流程图的相关依赖,在下⼀篇会写出来,项⽬中⼀般都是在前端在线设计;所以直接放上去也没事<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 https:///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.2.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com</groupId><artifactId>springboot_activiti</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_activiti</name><description>Demo project for Spring Boot</description><properties><springboot.version>2.2.0.RELEASE</springboot.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><activiti.version>6.0.0</activiti.version></properties><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activiti.version}</version><exclusions><exclusion><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-asl</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><artifactId>spring-context</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-jdbc</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-tx</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-orm</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-beans</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>mybatis</artifactId><groupId>org.mybatis</groupId></exclusion><exclusion><artifactId>activation</artifactId><groupId>javax.activation</groupId></exclusion></exclusions></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId> <version>${activiti.version}</version></dependency><!-- Activiti 流程图 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-common-rest</artifactId><version>${activiti.version}</version></dependency><!-- Activiti 在线设计 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-modeler</artifactId><version>5.22.0</version><exclusions><exclusion><artifactId>spring-beans</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-context</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-core</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-tx</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-web</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>spring-security-config</artifactId><groupId>org.springframework.security</groupId> </exclusion><exclusion><artifactId>spring-security-core</artifactId><groupId>org.springframework.security</groupId> </exclusion><exclusion><artifactId>spring-security-crypto</artifactId><groupId>org.springframework.security</groupId> </exclusion><exclusion><artifactId>spring-security-web</artifactId><groupId>org.springframework.security</groupId> </exclusion><exclusion><artifactId>spring-webmvc</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>activation</artifactId><groupId>javax.activation</groupId></exclusion><exclusion><artifactId>commons-io</artifactId><groupId>commons-io</groupId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>${springboot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.10.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><port>8081</port><path>/activity</path><systemProperties><com.sun.management.jmxremote.port>4000</com.sun.management.jmxremote.port></systemProperties></configuration></plugin></plugins></build></project>View Code4.yml⽂件这⾥采⽤的数据库还是mysql这⾥有个需要注意的地⽅,springboot2.2中的driver-class-name值变了,不是以前的那个了,不然会报错spring:datasource:url: jdbc:mysql://localhost:3307/t2?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&serverTimezone=UTC username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driveractiviti:# ⾃动部署验证设置:true-开启(默认)、false-关闭check-process-definitions: false#⾃动部署⽂件路径后缀# process-definition-location-prefix: classpath:/processes/# process-definition-location-suffixes:# - **.bpmn# - **.bpmn20.xmlserver:port: 8082View Code5.配置已经好了,下⾯开始写代码了,只是初步写了⼀些新建流程,正常提交流程,直接结束流程,以及查询待办的案例,细节还需要各⾃⾃⼰去调试学习 controllerpackage com.springboot_activiti.controller;import com.springboot_activiti.service.ActivityConsumerService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/activiti")public class ActivitiController {@Autowiredprivate ActivityConsumerService activityConsumerService;/*** 注册流程* @return*/@RequestMapping("/createDeployment")public Boolean createDeployment(){return activityConsumerService.createDeployment();}/*** 启动流程* @return*/@RequestMapping("/startActivityDemo")public Boolean startActivityDemo(){return activityConsumerService.startActivityDemo("test01");}/*** 获取待办* @return*/@RequestMapping("/getTaskList")public boolean getTaskList(){return activityConsumerService.getTaskList();}/*** 提交* @param taskId* @return*/@RequestMapping("/complete")public boolean complete(String taskId){return plete(taskId);}/*** 根据流程id直接结束流程* @paramru* @return*/@RequestMapping("/deleteProcessInstance")public boolean deleteProcessInstance(String runId){return activityConsumerService.deleteProcessInstance(runId);}}View Codeservicepackage com.springboot_activiti.service;public interface ActivityConsumerService {boolean createDeployment();boolean startActivityDemo(String key);boolean getTaskList();boolean complete(String taskId);boolean deleteProcessInstance(String runId);}View Code实现类package com.springboot_activiti.service;import org.activiti.engine.RepositoryService;import org.activiti.engine.RuntimeService;import org.activiti.engine.TaskService;import org.activiti.engine.repository.DeploymentBuilder;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Service("activityService")public class ActivityConsumerServiceImpl implements ActivityConsumerService { @Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;@Autowiredprivate RepositoryService repositoryService;/*** 注册⼀个流程* @return*/@Overridepublic boolean createDeployment() {DeploymentBuilder builder=repositoryService.createDeployment();builder.addClasspathResource("test01.bpmn");builder.deploy();return true;}/*** 查询待办* @return*/public boolean getTaskList(){//获取待办的⼀些信息,这⾥可以传⼊需要查询的⽤户,//我这⾥查询的所有待办List<Task> tasks = taskService.createTaskQuery().list();for (Task t:tasks) {System.out.println(t.getCreateTime());System.out.println(t.getId());System.out.println(t.getName());System.out.println(t.getProcessInstanceId());System.out.println(t.getTaskDefinitionKey());System.out.println(t.getParentTaskId());}return true;}/*** 根据流程key开启⼀个流程* @param key* @return*/@Overridepublic boolean startActivityDemo(String key) {ProcessInstance test01 = runtimeService.startProcessInstanceByKey(key); String id = test01.getId();System.out.println("流程id="+id);/**//* String assignee = "abc";*/return true;}/*** 根据任务id提交任务* @param taskId* @return*/@Overridepublic boolean complete(String taskId){plete(taskId);return true;}/*** 根据流程id直接结束流程* @param runId* @return*/@Overridepublic boolean deleteProcessInstance(String runId){runtimeService.deleteProcessInstance(runId,"结束");return true;}}View Code启动类,这⾥存在⼀个在线视图设计的验证处理,package com.springboot_activiti;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication;import ponentScan;@ComponentScan("com")@SpringBootApplication@EnableAutoConfiguration(exclude = {org.activiti.spring.boot.SecurityAutoConfiguration.class})public class SpringbootActivitiApplication {public static void main(String[] args) {SpringApplication.run(SpringbootActivitiApplication.class, args);}}View Code所有的代码已经写好了备注说明:项⽬启动会新建28张表,各⾃代表的含义⾃⾏百度把因为我的数据都是直接在流程图bpmn⽂件⾥⾯写好的,实际中肯定是在代码⾥⾯指定的⾸先访问注册流程启动流程(会返回⼀个流程id)查看待办就可以获取相关的信息了正常提交任务,会审批到下⼀节点(查看待办可以得到任务id)直接结束流程(⾮正常结束,启动流程的id传⼊即可)请求案例查询待办启动流程。
sts4集成springboot和activiti5

sts4集成springboot和activiti5建⽴ springboot项⽬勾选mysql web等添加activiti的jar的pom坐标<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 https:///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.4.4</version><relativePath/><!-- lookup parent from repository --></parent><groupId>cn.taoao</groupId><artifactId>demo_activiti</artifactId><version>0.0.1-SNAPSHOT</version><name>demo_activiti</name><description>demo_activiti</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- user define--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.4</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><!-- https:///artifact/org.activiti/activiti-engine --><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>5.22.0</version></dependency><!-- https:///artifact/org.activiti/activiti-spring --><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>5.23.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>然后在src/main/resource 下建⽴ activiti.cfg.xml ⽂件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_demo"></property><property name="jdbcUsername" value="root"></property><property name="jdbcPassword" value="xxxxx"></property><property name="databaseSchemaUpdate" value="true"></property></bean></beans>这时,代码若没有提⽰property的属性,可以安装sts spring ide插件,e4.18,可以通过aboute4.18版本号,通过以下获得勾选⾃动存图⽚功能建⽴测试类@Testvoid initTable() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();System.out.println(processEngine);}即可产⽣所需的25张表。
- 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流程设计和部署后,在业务工程中即可对流程进行操作。