Spring和activiti進行整合過程解析
阿新 • • 發佈:2020-03-10
一、整合原理
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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- 配置連線池 --> <bean id="dataSource" 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 id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置使用spring提供的的流程引擎配置物件 --> <bean id="processEngineConfiguration" 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 id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration"></property> </bean> <!-- 配置activiti的服務元件 --> <!-- 這裡是通過例項工廠來建立服務元件的物件 ProcessEngine類的父類EngineServices中有獲取服務元件的get方法,所以這裡把processEngine當做例項工廠來使用,而這幾個物件是在建立流程引擎配置物件時就new出來的 --> <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"> </bean> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"> </bean> <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"> </bean> <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"> </bean> </beans>
三、測試
在程式碼中載入spring配置檔案,並直接從容器裡獲取服務元件,看能否直接使用服務元件
@Test public 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已經整合完成了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。