您的位置:首页技术文章
文章详情页

Spring和activiti进行整合过程解析

【字号: 日期:2023-09-17 16:13:12浏览:2作者:猪猪

一、整合原理

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,数据库驱动等依赖。

2.2 创建spring配置文件

在resources目录下创建spring配置文件,applicationContext.xml,其中主要配置如下bean

(1)数据源(连接池)

(2)事务管理器(和spring整合后必须配置事务管理器)

(3)流程引擎配置对象,这里可以注入一些流程引擎的配置

(4)流程引擎对象

(5)activiti的服务组件,配置后在程序中可以直接从容器中获取

完整的配置文件如下

<beans xmlns='http://www.springframework.org/schema/beans' xmlns:context='http://www.springframework.org/schema/context' xmlns:tx='http://www.springframework.org/schema/tx' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd'> <!-- 配置连接池 --> <bean class='com.mchange.v2.c3p0.ComboPooledDataSource'> <property name='driverClass' value='com.mysql.jdbc.Driver'/> <property name='jdbcUrl' value='jdbc:mysql://localhost:3306/activiti_01'/> <property name='user' value='root'/> <property name='password' value='root'/> </bean> <!-- 事务管理器 --> <bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'> <property name='dataSource' ref='dataSource'></property> </bean> <!-- 配置使用spring提供的的流程引擎配置对象 --> <bean class='org.activiti.spring.SpringProcessEngineConfiguration'> <property name='dataSource' ref='dataSource'></property> <property name='transactionManager' ref='transactionManager'></property> <property name='databaseSchemaUpdate' value='true'></property> <property name='deploymentResources' value='classpath*:/process/*.bpmn'></property> </bean> <!-- 配置流程引擎工厂bean,获取这个bean就可以直接获取到流程引擎对象 --> <!-- 注意这个不是使用静态工厂来获取bean --> <bean class='org.activiti.spring.ProcessEngineFactoryBean'> <property name='processEngineConfiguration' ref='processEngineConfiguration'></property> </bean> <!-- 配置activiti的服务组件 --> <!-- 这里是通过实例工厂来创建服务组件的对象 ProcessEngine类的父类EngineServices中有获取服务组件的get方法,所以这里把processEngine当做实例工厂来使用, 而这几个对象是在创建流程引擎配置对象时就new出来的 --> <bean factory-bean='processEngine' factory-method='getRepositoryService'> </bean> <bean factory-bean='processEngine' factory-method='getRuntimeService'> </bean> <bean factory-bean='processEngine' factory-method='getTaskService'> </bean> <bean factory-bean='processEngine' factory-method='getHistoryService'> </bean></beans>

三、测试

在代码中加载spring配置文件,并直接从容器里获取服务组件,看能否直接使用服务组件

@Testpublic void test4() { ApplicationContext context = new ClassPathXmlApplicationContext('applicationContext.xml'); //通过容器获取taskService组件 TaskService taskService= (TaskService) context.getBean('taskService'); System.out.println(taskService); List<Task> list = taskService.createTaskQuery().taskAssignee('tom').list(); for (Task task : list) { System.out.println(task); }}

如果能够成功运行,说明activiti和spring已经整合完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。

标签: Spring
相关文章: