因最近項目需求須要運用流程,選擇使用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的接口,建立和管理流程,具體的內容仍是存在本身建立的數據庫中。
如今開始用,先跑起來再說:
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>
在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>
須要先在mysql數據庫中建立名爲「activiti」的數據庫前端
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函數
數據庫表說明: 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張)java

springboot2.0以上建議用activiti7.0以上,否則可能會遇到不少版本問題,activiti6出的時候springboot2.0還沒出。mysql
生成數據庫表的時候必定不能用com.mysql.cj.jdbc.Driver驅動,緣由是activiti暫時只支持com.mysql.jdbc.Driver,因此須要把mysql版本下降。
bug:web
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
參考網站:spring
https://segmentfault.com/a/11...