springboot2.0+activiti 7 整合(一)--初識activiti和創建數據庫

一、初識activiti

因最近項目需求需要運用流程,選擇使用activiti流程框架,網上大多是springboot2.0以下版本和activiti6.0的整合,因項目已經使用springboot2.0,所以記錄整合activiti7的過程。

個人對activiti的印象:

1.activiti本身就是一個比較完整的應用程序,它包含數據庫,API和前端;**可獨立運行,詳細可參考[activiti 6.0](https://www.activiti.org/get-started)的三個應用activiti-admin.war,activiti-app.war,activiti-rest.war(不要問我爲啥不說7.0的,是因爲我在官網沒找到7.0的相關文檔,6.0的反而非常全)

2.activiti只是流程框架;**關於原有項目與activiti整合,現在大致的想法是使用activiti的接口,創建和管理流程,具體的內容還是存在自己創建的數據庫中。

二、創建activiti數據庫

 現在開始用,先跑起來再說:

2.1 pom.xml

springboot 版本:2.2.1.RELEASE 
activiti 版本:7.1.0.M1
mysql 版本:5.1.30(很關鍵)

具體代碼:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>activiti-demo2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>activiti-demo2</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
<!--            <scope>runtime</scope>-->
            <version>5.1.30</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.2 創建activiti.cfg.xml文件

在resources文件下創建activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="databaseType" value="mysql"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"></property>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="123456"></property>
    </bean>
</beans>

2.3 創建activiti數據庫

需要先在mysql數據庫中創建名爲“activiti”的數據庫

2.4 創建main函數

package com.example.activitidemo2;

import org.activiti.engine.impl.db.DbSchemaCreate;

/**
 * @Description: test
 * @Author: zx
 * @Time: 2019-11-20 09:25
 **/
public class Test {

    public static void main(String[] args) {
        DbSchemaCreate.main(args);
    }
}
運行main函數

2.5 創建成功

數據庫表說明:
ACT_RE_*: RE表示repository(倉庫),存儲流程靜態資源,如流程模型文件等
ACT_RU_*: RU表示runtime(運行時),存儲activiti運行時產生的數據,比如實例信息,用戶任務信息,job信息等,另外,當流程結束後,運行時數據將會被刪除,以保證數據量儘可能少,保證性能。
ACT_ID_*: ID表示identity(認證),存儲認證信息,比如用戶,組等。
ACT_HI_*: HI表示history(歷史),存儲流程歷史數據,比如實例信息,變量數據等。
ACT_GE_*: GE表示general(通用),存儲通用數據。

表只有25張,(activiti7沒有ID類的表,不影響整合,本來也不想要identity部分)(activiti6是28張)
activiti數據庫

三、踩過的坑

3.1 Springboot和activiti版本問題

springboot2.0以上建議用activiti7.0以上,不然可能會遇到很多版本問題,activiti6出的時候springboot2.0還沒出。

3.2 mysql和activiti版本問題

生成數據庫表的時候一定不能用com.mysql.cj.jdbc.Driver驅動,原因是activiti暫時只支持com.mysql.jdbc.Driver,所以需要把mysql版本降低。
bug:

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
	at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
	at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2121)
	at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2145)
	at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1310)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:967)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
	... 30 more

參考網站:

https://segmentfault.com/a/1190000020288808

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章