Activiti和Spring整合

前面的文章介绍了Activiti的流程部署。本章我们会将Activiti和Spring进行整合,并完成简单的审批和查询。

1、要实现Spring和整合,还需要引入activiti-spring包,pom的依赖如下:

  <dependency>

     <groupId>junit</groupId>

     <artifactId>junit</artifactId>

     <version>4.12</version>

     <scope>test</scope>

   </dependency>

   <dependency>

     <groupId>org.mybatis</groupId>

     <artifactId>mybatis</artifactId>

     <version>3.4.4</version>

   </dependency>

   <dependency>

     <groupId>org.mybatis</groupId>

     <artifactId>mybatis-spring</artifactId>

      <version>1.3.1</version>

   </dependency>

   <dependency>

     <groupId>mysql</groupId>

     <artifactId>mysql-connector-java</artifactId>

     <version>5.1.40</version>

   </dependency>

   <dependency>

     <groupId>com.mchange</groupId>

      <artifactId>c3p0</artifactId>

     <version>0.9.5.2</version>

   </dependency>

   <dependency>

     <groupId>org.springframework</groupId>

     <artifactId>spring-context</artifactId>

     <version>4.3.11.RELEASE</version>

   </dependency>

   <dependency>

     <groupId>org.springframework</groupId>

     <artifactId>spring-jdbc</artifactId>

     <version>4.3.11.RELEASE</version>

   </dependency>

   <dependency>

     <groupId>org.springframework</groupId>

     <artifactId>spring-test</artifactId>

     <version>4.3.11.RELEASE</version>

   </dependency>

   <dependency>

     <groupId>org.springframework</groupId>

     <artifactId>spring-webmvc</artifactId>

     <version>4.3.11.RELEASE</version>

   </dependency>

   <dependency>

      <groupId>org.springframework</groupId>

     <artifactId>spring-web</artifactId>

     <version>4.3.11.RELEASE</version>

   </dependency>

   <dependency>

     <groupId>log4j</groupId>

     <artifactId>log4j</artifactId>

     <version>1.2.12</version>

   </dependency>

   <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine-->

   <dependency>

     <groupId>org.activiti</groupId>

     <artifactId>activiti-engine</artifactId>

     <version>6.0.0</version>

   </dependency>

   <dependency>

   <groupId>org.activiti</groupId>

   <artifactId>activiti-spring</artifactId>

   <version>6.0.0</version>

 </dependency>

2、Activiti的配置文件:

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

      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 ">

   <!-- 配置数据库连接池 -->

   <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/oasys?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true"/>

       <property name="user" value="root"           />

       <property name="password" value="123456"/>

   </bean>

   <!-- 事务管理的配置 -->

   <bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource" ref="dataSource"/>

   </bean>

   <!-- 流程引擎配置对象 -->

   <bean id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">

       <property name="dataSource" ref="dataSource"/>

       <property name="transactionManager"ref="transactionManager"/>

       <property name="databaseSchemaUpdate"value="true"/>

   </bean>

   <!-- 流程引擎 -->

   <bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">

       <property name="processEngineConfiguration"ref="processEngineConfiguration"/>

   </bean>

   <!-- TaskService对象-->

   <bean id="taskService"factory-bean="processEngine"factory-method="getTaskService"/>

    <!--RuntimeService对象-->

   <bean id="runtimeService" factory-bean="processEngine"factory-method="getRuntimeService"/>

   <!-- RepositoryService对象-->

   <bean id="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/>

   <!-- HistoryService对象-->

   <bean id="historyService" factory-bean="processEngine"factory-method="getHistoryService"/>

</beans>

注意:在Activiti的配置文件中配置了几种主要的服务对象

Service服务说明

RepositoryService仓库服务

仓库服务是存储相关的服务,一般用来部署流程文件,获取流程文件,查询流程定义信息等操作,是引擎中的一个重要的服务。

创建方法:

RepositoryService repositoryService =engine.getRepositoryService();

运行时服务

流程运行时的流程实例,流程定义,流程版本,流程节点等信息,使用运行时服务操作,是引擎中的一个重要的服务

创建方法:

RuntimeService runtimeService =engine.getRuntimeService(); 

任务服务

流程运行时的会产生任务,接收、办理、完成等操作使用任务服务完成,是引擎中的一个重要的服务

创建方法:

TaskService taskService =engine.getTaskService(); 

3、Spring的配置文件:

<?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"

      xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.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/oasys?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true"/>

       <property name="user" value="root"           />

       <property name="password" value="123456"/>

   </bean>

   <!-- Spring和MyBatis整合,代替MyBatis配置文件 -->

   <bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

       <property name="dataSource" ref="dataSource"/>

       <!-- 扫描mapper文件 -->

       <property name="mapperLocations"

                 value="classpath:mapper/*.xml"/>

   </bean>

   <!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 -->

   <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

       <property name="basePackage"value="com.qf.oa.dao" />

       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

   </bean>

   <!-- 配置Spring自动扫描包中的类-->

   <context:component-scan base-package="com.qf.oa">

       <!-- 排除带Controller注解的类-->

       <context:exclude-filter type="annotation"

                               expression="org.springframework.stereotype.Controller"/>

   </context:component-scan>

   <!-- 导入Activiti的配置 -->

   <import resource="activiti.cfg.xml"/>

</beans>

4、启动个人任务

给流程添加审批人

单元测试:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:spring.xml")

public class ProcessTest {

    @Autowired

    private TaskServicetaskService;

    @Autowired

    private RuntimeServiceruntimeService;

    @Autowired

    private HistoryServicehistoryService;

    @Autowired

    private RepositoryServicerepositoryService;

                  //部署流程

    @Test

    public voiddeployAddSigninProcess() {

       repositoryService.createDeployment()

               .key("addsignin_process")

               .addClasspathResource("bpmn/proc_addsignin.bpmn")

                .addClasspathResource("bpmn/proc_addsignin.png")

                .name("补签流程")

                .deploy();

    }

                  //启动流程

    @Test

    public void startProcess(){

       runtimeService.startProcessInstanceByKey("addsignin_process");

    }

                  //查询个人任务

    @Test

    public void queryTask(){

TaskQuery taskQuery = taskService.createTaskQuery();

//按照审批人和流程id查询

taskQuery.taskAssignee("张三");

taskQuery.processDefinitionKey("addsignin_process");

List<Task> list = taskQuery.list();

        for (Task task : list) {

           System.out.println(task.getId());

           System.out.println(task.getAssignee());

           System.out.println(task.getName());

           System.out.println(task.getOwner());

            System.out.println(task.getCategory());

           System.out.println(task.getCreateTime());

           System.out.println(task.getExecutionId());

           System.out.println(task.getTaskDefinitionKey());

           System.out.println(task.getProcessDefinitionId());

        }

    }

//完成任务

@Test 

public void completeTask(){ 

    //通过TaskID完成任务

    taskService.complete("2501");

    System.out.println("完成任务"); 

}

}

以上我们通过Spring整合了Activiti,并且实现了基本的Activiti流程的启动、查询和完成。

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/80227334