activiti學習7:spring和activiti進行整合


activiti學習7:spring和activiti進行整合

上一篇博客中學習了如何動態的獲取activiti的流程圖,這次來學習下activiti如何和spring進行整合

本文中使用的activiti版本是5.22.0

一、整合原理

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已經整合完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM