SpringBoot整合Activiti案例


1.Spring整合Activiti
   步驟一:導入依賴
    <!--activiti常規依賴-->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-bpmn-model</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-bpmn-converter</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-json-converter</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-bpmn-layout</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <dependency>
      <groupId>org.activiti.cloud</groupId>
      <artifactId>activiti-cloud-services-api</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <!--activiti和Spring整合依賴-->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>7.0.0.Beta1</version>
    </dependency>
    <!--數據庫依賴-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

    <!--單測依賴-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.0.7.RELEASE</version>
    </dependency>

    <!-- log start -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>

    <!--數據源-->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
   
   
   步驟二:配置Activiti
    配置內容:1.數據源         2.配置processEngine對象        3.配置XXXXService
    <!--數據源-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     <property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/>
     <property name="username" value="root"/>
     <property name="password" value="root"/>
    </bean>
    <!--配置ProcessEngineConfiguration-->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
     <!--數據源-->
     <property name="dataSource" ref="dataSource"/>
     <!--配置事務-->
     <property name="transactionManager" ref="transactionManager"/>
     <!--數據生成策略    true   false   create   drop-create -->
     <property name="databaseSchemaUpdate" value="true"/>
    </bean>
    <!--配置ProcessEngine-->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
     <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
    </bean>
    <!--配置RepositoryService-->
    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
    <!--配置RuntimeService-->
    <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
    <!--配置TaskService-->
    <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
    <!--配置HistoryService-->
    <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
    
    <!--配置事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"/>
    </bean>
    
   
   
   步驟三:測試Activiti
    @RunWith(SpringJUnit4ClassRunner.class)     //測試方式  junit4.12+
    @ContextConfiguration("classpath:activiti-spring.xml")   //配置
    public class ActivitiSpringTest {
     @Resource
     private RepositoryService repositoryService;
     @Resource
     private RuntimeService runtimeService;

     /**
      * 測試流程部署
      */
     @Test
     public void deployment(){
      repositoryService.createDeployment()
        .addClasspathResource("amedical/medical.bpmn")
        .name("測試Spring流程部署")
        .deploy();
     }
    }
    
  
  
  
  
  
  
  
  2.Activiti7的新特性
   ProcessRuntime
   TaskRuntaime
  
  
  
  
  
  
  3.SpringBoot2整合Activiti7
   步驟一:引入依賴
    <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.1.4.RELEASE</version>
    </parent>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring-boot-starter -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring-boot-starter</artifactId>
      <version>7.0.0.Beta2</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>
   
   步驟二:配置文件
    spring:
      datasource:
     url: jdbc:mysql://localhost:3306/activiti-y2170?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
     username : root
     password : root
     driver-class-name: com.mysql.jdbc.Driver
      activiti:
     db-history-used: true
     
   步驟三:將SpringSecurity配置添加到項目當中
    SecurityUtil.java 關於權限登陸
    DemoApplicationConfiguration 關於權限配置
   
   步驟四:啟動工程
    @SpringBootApplication
    public class StartActiviti {
     public static void main(String[] args) {
      SpringApplication.run(StartActiviti.class,args);
     }
    }
   注意問題:
    1.Activiti7和SpringSecurity耦合,需要加入SpringSecurity的依賴和配置,我們可以使用Security中的用戶角色組定義流程執行的組
    2.流程默認可自動部署,但是需要再resources/processes文件夾,將流程文件放入當中
    3.默認歷史表不會生成,需要手動開啟配置
  4.執行流程
   @RestController
   @RequestMapping("/activiti")
   public class ActivitiController {
    @Resource
    private ProcessRuntime processRuntime;
    @Resource
    private TaskRuntime taskRuntime;
    @Resource
    private SecurityUtil securityUtil;
    /**
     * 查詢流程定義
     */
    @RequestMapping("/getProcess")
    public void getProcess(){
     //查詢所有流程定義信息
     Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));
     System.out.println("當前流程定義的數量:"+processDefinitionPage.getTotalItems());
     //獲取流程信息
     for (ProcessDefinition processDefinition:processDefinitionPage.getContent()) {
      System.out.println("流程定義信息"+processDefinition);
     }
    }
    /**
     * 啟動流程示例
     */
    @RequestMapping("/startInstance")
    public void startInstance(){
     ProcessInstance instance = processRuntime.start(ProcessPayloadBuilder.start().withProcessDefinitionKey("demo").build());
     System.out.println(instance.getId());
    }
    /**
     * 獲取任務,拾取任務,並且執行
     */
    @RequestMapping("/getTask")
    public void getTask(){
     securityUtil.logInAs("salaboy");        //指定組內任務人
     Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
     if(tasks.getTotalItems()>0){
      for (Task task:tasks.getContent()) {
       System.out.println("任務名稱:"+task.getName());
       //拾取任務
       taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());
       //執行任務
       taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());
      }
     }
    }
   }


免責聲明!

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



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