阿勒泰地区网站建设_网站建设公司_CMS_seo优化
2025/12/17 12:02:40 网站建设 项目流程

文章目录

    • 1、Activiti7 核心类体系架构
    • 2、流程引擎配置类 - ProcessEngineConfiguration
      • 2.1 StandaloneProcessEngineConfiguration
      • 2.2 SpringProcessEngineConfiguration
      • 2.3 创建processEngineConfiguration
    • 3、工作流引擎创建 - ProcessEngine
      • 3.1 默认创建方式
      • 3.2 通用方式
    • 4、Servcie服务接口
      • 4.1 Service创建方式
      • 4.2 Service总览
    • 5、使用示例:核心对象创建与服务获取
      • 5.1. 创建流程引擎 (ProcessEngine)
      • 5.2. 获取服务并操作

上一章节我们通过java代码中我们调用Activiti的工具类完成了Activiti数据库表的生成,本节带大家来了解Activiti的类关系,通过各个工具类关系图梳理出它的核心体系架构、各类间的关系以及主要服务接口的作用。

1、Activiti7 核心类体系架构

Activiti7的类结构围绕 ProcessEngine(流程引擎) 这个核心入口展开,其核心关系可以概括为以下模式:

  • activiti.cfg.xml

activiti的引擎配置文件,包括:ProcessEngineConfiguration的定义、数据源定义、事务管理器等,此文件其实就是一个spring配置文件。

2、流程引擎配置类 - ProcessEngineConfiguration

这是创建流程引擎的工厂类,负责读取配置(如数据源、事务管理等)。根据是否与Spring整合,有两种主要实现:

  • StandaloneProcessEngineConfiguration:用于Activiti独立运行,自己管理事务。

  • SpringProcessEngineConfiguration:用于与Spring框架整合,使用Spring的事务管理。

2.1 StandaloneProcessEngineConfiguration

使用StandaloneProcessEngineConfigurationActiviti可以单独运行,来创建ProcessEngine,Activiti会自己处理事务。

配置文件方式:通常在activiti.cfg.xml配置文件中定义一个id为 processEngineConfiguration 的bean.

方法如下:

<beanid="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!--配置数据库相关的信息--><!--数据库驱动--><propertyname="jdbcDriver"value="com.mysql.jdbc.Driver"/><!--数据库链接--><propertyname="jdbcUrl"value="jdbc:mysql:///activiti"/><!--数据库用户名--><propertyname="jdbcUsername"value="root"/><!--数据库密码--><propertyname="jdbcPassword"value="123456"/><!--actviti数据库表在生成时的策略 true - 如果数据库中已经存在相应的表,那么直接使用,如果不存在,那么会创建--><propertyname="databaseSchemaUpdate"value="true"/></bean>

还可以加入连接池:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/contex http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql:///activiti"/><propertyname="username"value="root"/><propertyname="password"value="123456"/><propertyname="maxActive"value="3"/><propertyname="maxIdle"value="1"/></bean><!--在默认方式下 bean的id 固定为 processEngineConfiguration--><beanid="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!--引入上面配置好的 链接池--><propertyname="dataSource"ref="dataSource"/><!--actviti数据库表在生成时的策略 true - 如果数据库中已经存在相应的表,那么直接使用,如果不存在,那么会创建--><propertyname="databaseSchemaUpdate"value="true"/></bean></beans>

2.2 SpringProcessEngineConfiguration

通过org.activiti.spring.SpringProcessEngineConfiguration 与Spring整合。

创建spring与activiti的整合配置文件:

activity-spring.cfg.xml(名称可修改)

<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"><!-- 工作流引擎配置bean --><beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration"><!-- 数据源 --><propertyname="dataSource"ref="dataSource"/><!-- 使用spring事务管理器 --><propertyname="transactionManager"ref="transactionManager"/><!-- 数据库策略 --><propertyname="databaseSchemaUpdate"value="drop-create"/><!-- activiti的定时任务关闭 --><propertyname="jobExecutorActivate"value="false"/></bean><!-- 流程引擎 --><beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"><propertyname="processEngineConfiguration"ref="processEngineConfiguration"/></bean><!-- 资源服务service --><beanid="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/><!-- 流程运行service --><beanid="runtimeService"factory-bean="processEngine"factory-method="getRuntimeService"/><!-- 任务管理service --><beanid="taskService"factory-bean="processEngine"factory-method="getTaskService"/><!-- 历史管理service --><beanid="historyService"factory-bean="processEngine"factory-method="getHistoryService"/><!-- 用户管理service --><beanid="identityService"factory-bean="processEngine"factory-method="getIdentityService"/><!-- 引擎管理service --><beanid="managementService"factory-bean="processEngine"factory-method="getManagementService"/><!-- 数据源 --><beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/activiti"/><propertyname="username"value="root"/><propertyname="password"value="mysql"/><propertyname="maxActive"value="3"/><propertyname="maxIdle"value="1"/></bean><!-- 事务管理器 --><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean><!-- 通知 --><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes></tx:attributes><!-- 传播行为 --><tx:methodname="save*"propagation="REQUIRED"/><tx:methodname="insert*"propagation="REQUIRED"/><tx:methodname="delete*"propagation="REQUIRED"/><tx:methodname="update*"propagation="REQUIRED"/><tx:methodname="find*"propagation="SUPPORTS"read-only="true"/><tx:methodname="get*"propagation="SUPPORTS"read-only="true"/></tx:attributes></tx:advice><!-- 切面,根据具体项目修改切点配置 --><aop:configproxy-target-class="true"><aop:advisoradvice-ref="txAdvice"pointcut="execution(* com.itheima.ihrm.service.impl.*.(..))"*/></aop:config></beans>

2.3 创建processEngineConfiguration

ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
上边的代码要求activiti.cfg.xml中必须有一个processEngineConfiguration的bean

也可以使用下边的方法,更改bean 的名字:

ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);

3、工作流引擎创建 - ProcessEngine

这是Activiti工作的核心门户,通过它可以获取所有操作流程的Service;(通过ProcessEngineConfiguration创建processEngine,通过ProcessEngine创建各个service接口)创建方式通常有两种:

3.1 默认创建方式

使用 ProcessEngines.getDefaultProcessEngine(),它会自动加载classpath下名为 activiti.cfg.xml 的配置文件。:

//直接使用工具类 ProcessEngines,使用classpath下的activiti.cfg.xml中的配置创建processEngineProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();System.out.println(processEngine);

3.2 通用方式

先构建ProcessEngineConfiguration,再通过其buildProcessEngine()方法创建。

//先构建ProcessEngineConfigurationProcessEngineConfigurationconfiguration=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库ProcessEngineprocessEngine=configuration.buildProcessEngine();

4、Servcie服务接口

Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以就是操作服务对应的数据表;

所有对工作流的操作都通过从ProcessEngine中获取的各种Service完成。在Activiti7中,IdentityService和FormService已被移除。以下是核心的五个Service及其作用:

4.1 Service创建方式

通过ProcessEngine创建Service

方式如下:

RuntimeServiceruntimeService=processEngine.getRuntimeService();RepositoryServicerepositoryService=processEngine.getRepositoryService();TaskServicetaskService=processEngine.getTaskService();

4.2 Service总览

服务接口主要职责关键操作举例
RepositoryService流程资源与部署管理。管理流程定义、模型等静态信息。部署流程定义(.bpmn文件)、查询流程定义、挂起/激活流程。
RuntimeService流程运行实例管理。负责启动流程实例、设置流程变量等动态操作。启动流程实例、查询执行实例、触发流程事件。
TaskService用户任务管理。处理流程中需要人工参与的任务。查询用户任务、完成任务、认领任务、设置任务负责人。
HistoryService历史数据查询。提供对已执行流程的历史信息的查询功能,用于审计和报表。查询已结束的流程实例、历史任务详情、流程变量变更记录。
ManagementService引擎管理维护。提供对Activiti引擎本身的维护和管理功能,通常在系统管理时使用。查询数据库表、管理异步作业。

简单介绍:

  • RepositoryService

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。

除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。

暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。

获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。

  • RuntimeService

Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

  • TaskService

Activiti的任务管理类。可以从这个类中获取任务的信息。

  • HistoryService

Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。

  • ManagementService

Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

5、使用示例:核心对象创建与服务获取

5.1. 创建流程引擎 (ProcessEngine)

// 方式一:默认配置(需要classpath下有activiti.cfg.xml)ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();// 方式二:自定义配置ProcessEngineConfigurationconfig=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");ProcessEngineprocessEngine=config.buildProcessEngine();

5.2. 获取服务并操作

创建引擎后,即可获取各个Service进行业务操作

// 获取部署服务RepositoryServicerepositoryService=processEngine.getRepositoryService();// 部署一个流程Deploymentdeployment=repositoryService.createDeployment().addClasspathResource("holiday-request.bpmn20.xml").deploy();// 获取运行时服务RuntimeServiceruntimeService=processEngine.getRuntimeService();// 使用流程定义的Key启动一个流程实例ProcessInstanceinstance=runtimeService.startProcessInstanceByKey("holidayRequest");// 获取任务服务TaskServicetaskService=processEngine.getTaskService();// 查询某个用户的待办任务List<Task>tasks=taskService.createTaskQuery().taskAssignee("zhangsan").list();// 完成任务taskService.complete(taskId);

总而言之,理解Activiti7类关系的关键是掌握“配置 -> 引擎 -> 服务”这条主线。所有的业务操作都通过从ProcessEngine中获取的五大Service来完成。


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询