目錄: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開始節點拉一條線到下一個節點
- 從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&useUnicode=true&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&serverTimezone=Asia/Shanghai&useUnicode=true&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源碼