activiti(一):idea整合spring和avtiviti


目錄:activiti 目錄

一、 創建maven項目

1.1 創建項目

  • 新建maven項目:

一路next得到:

  • pom包:
    • spring包(根據需要導入)
    • activiti包
    • test包(我這里都在測試中執行,所以導入這個包)
    • mysql包
       <!-- Test Dependency Begin -->
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
          </dependency>
          <!-- Test Dependency End -->
      
          <!-- Spring Dependency Begin -->
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.18.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.18.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.3.18.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.18.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.18.RELEASE</version>
          </dependency>
          <!-- Spring Dependency End -->
      
          <!--Activiti Dependency Begin -->
          <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>
          <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>6.0.0</version>
          </dependency>
          <!--Activiti Dependency End -->
      
          <!-- Mysql Begin-->
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
          </dependency>
          <!-- Mysql End -->

1.2 安裝activiti插件

1.3 創建activiti流程圖

  • 我這里創建文件名:apply

  • 畫圖

我們創建一個審批流程,將右側的圖標拖到中間,在圖標中間起始連接到下一個節點生成連線!

  • 開始節點

  • 任務節點:報銷申請

    • 從apply開始節點拉一條線到下一個節點
  • 任務節點:財務審批

  • 任務節點:經理審批

  • 任務節點:總經理審批

  • 結束節點

  • 導出流程圖片,idea對activiti的支持不算很好,導出圖片不方便。

    • 畫圖之后會生成apply.bpmn文件,將該文件改名為:apply.xml

  • 這時候如果出現亂碼,別慌,這是由於支持不行導致的(最好使用eclipse,我見同事用eclipse畫流程圖賊方便)。處理方法

    • 找到idea的bin目錄
    • 修改啟動環境變量文件
    • 最后一行追加:-Dfile.encoding=UTF-8
    • 重啟idea
  • 導出圖片

    • 先打開xml的diagrams

    • 導出png為apply.png

    • 將導出的png文件跟apply.xml放到一起,然后將apply.xml名字改回apply.bpmn

1.4 配置文件

  • 創建配置文件:activiti.cfg.xml。

    這是它的默認文件名,不要瞎改...,看源碼:

  • 文件內容:配置數據庫名為activitidemo(可以隨自己起名,但是要先在數據庫創建它)

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
         default-autowire="byName" default-lazy-init="false">
  
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
      <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"></property>
      <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activitidemo?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8"></property>
      <property name="jdbcUsername" value="root"></property>
      <property name="jdbcPassword" value="root"></property>
      <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
  
  </beans>
  • 創建數據庫

1.5 單元測試類

  • 初始化數據庫:

       /**
         * 初始化數據庫
         * @author caodahuan
         * @date 2019/9/3 
         * @return void 
         */
        @Test
        public void createTable(){
            final ProcessEngine processEngine = ProcessEngineConfiguration
                    .createProcessEngineConfigurationFromResource("activiti.cfg.xml")
                    .buildProcessEngine();
        }
    }
    

    這里報錯:org.apache.ibatis.exceptions.PersistenceException:

    Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'activiti.act_ge_property' doesn't exist

    The error may exist in org/activiti/db/mapping/entity/Property.xml

    The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline

    The error occurred while setting parameters

    SQL: select * from ACT_GE_PROPERTY where NAME_ = ?

    Cause: java.sql.SQLSyntaxErrorException: Table 'activiti.act_ge_property' doesn't exist

    郁悶得很...仔細檢查了多次為什么不行。最后發現,原來我曾經創建過一次activititest庫,在里面執行過一次創建。這次用的庫名為activitidemo,我本來以為完全獨立,不會有問題,但是報錯。刪掉activititest庫,則可以執行成功。

    原因:

    ​ 我們策略設置了“如果不存在則創建表”,而我新建庫,必定會新建表,但是沒有新建,反而報錯。於是,開始源碼追蹤,最后發現,去數據庫判斷是否存在表時調用了ResultSet getTables,我傳入參數activitidemo,指定查此庫,但最后返回結果依然能得到表。這是為什么呢....

    ​ 這個方法應該是不能查到表的(該數據庫是我新建的,里面沒有表,根據策略,沒表就要創建表),但是偏偏查到了表,於是我百度了下這個方法得到:

    解決:

    ​ 我將數據庫連接配置初始化參數加上:nullCatalogMeansCurrent=true。再次模擬情況,問題解決!

    變為:

    <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activitidemo?nullCatalogMeansCurrent=true&amp;serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="root"></property>
        <!--
          如果表不存在,則創建
         -->
    <property name="databaseSchemaUpdate" value="true"></property>
    
  • 總結:

    在經過上述過程后,數據庫創建表,如果按照pom里面版本,應該是25張表。到此已經將spring和activiti整合起來,並創建了一個流程。但是流程的操作,還沒有開始...這將是一個復雜的過程。

  • 參考:
    https://blog.csdn.net/cs_hnu_scw/article/details/79059965
    activiti6.x源碼


免責聲明!

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



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