入門
安裝插件【可不安裝】
通過idea畫流程圖。在idea中的插件管理中,查找叫actiBMP的插件,安裝即可。
項目結構
項目依賴
<?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.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ft.spring.activiti</groupId>
<artifactId>ft-demo-activiti</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ft-demo-activiti</name>
<description>Spring Boot與Activiti整合</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件
spring.datasource.url=jdbc:mysql://localhost:3308/ft_activiti?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# 注意這裏,開啓true會自動創建activiti表
spring.activiti.database-schema-update=true
spring.jpa.show-sql=true
啓動項目
成功啓動項目,生成表結構如下:
異常記錄
【1】FileNotFoundException
詳細如下
Caused by: java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist
at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195) ~[spring-core-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:498) ~[spring-core-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:298) ~[spring-core-5.1.10.RELEASE.jar:5.1.10.RELEASE]
兩種解決方案
[1]: 在resource目錄下添加processes文件夾,並且文件夾下不能爲空。
[2] :在application.properties下配置
# 啓動時候不檢查流程配置文件
spring.activiti.check-process-definitions=false
【2】table不存在
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'ft_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 'ft_activiti.act_ge_property' doesn't exist
解決方案:
[1] 配置項
spring.datasource.url=jdbc:mysql://10.5.5.175:3308/ft_activiti?characterEncoding=utf8&useSSL=false&nullCatalogMeansCurrent=true
# 注意這裏,開啓true會自動創建activiti表
spring.activiti.database-schema-update=true
因爲mysql使用schema標識庫名而不是catalog,因此mysql會掃描所有的庫來找表,如果其他庫中有相同名稱的表,activiti就以爲找到了,本質上這個表在當前數據庫中並不存在。
設置nullCatalogMeansCurrent=true,表示mysql默認當前數據庫操作,在mysql-connector-java 5.x.x該參數默認爲true,在6.x.x以上默認爲false,因此需要設置nullCatalogMeansCurrent=true。
[2] MySQL依賴
出現這種問題的原因是mysql版本問題,mysql8.xxx以上驅動會出現這個問題,更改依賴爲5.x.x。
【3】依賴衝突問題
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724) ~[na:1.8.0_181]
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531) ~[na:1.8.0_181]
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355) ~[na:1.8.0_181]
at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) ~[na:1.8.0_181]
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) ~[na:1.8.0_181]
at sun.reflect.an
解決:
import org.activiti.spring.boot.SecurityAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// 排除該配置
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class FtDemoActivitiApplication {
public static void main(String[] args) {
SpringApplication.run(FtDemoActivitiApplication.class, args);
}
}
【4】預覽流程圖片亂碼
import org.activiti.engine.ProcessEngine;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.io.IOException;
@Configuration
public class ActivitiConfig implements ProcessEngineConfigurationConfigurer {
@Bean
public ProcessEngine processEngine(PlatformTransactionManager transactionManager, DataSource dataSource) throws IOException {
SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
configuration.setActivityFontName("宋體");
configuration.setAnnotationFontName("宋體");
configuration.setLabelFontName("宋體");
return configuration.buildProcessEngine();
}
/**
* 解決工作流生成圖片亂碼問題
*
* @param processEngineConfiguration processEngineConfiguration
*/
@Override
public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
processEngineConfiguration.setActivityFontName("宋體");
processEngineConfiguration.setAnnotationFontName("宋體");
processEngineConfiguration.setLabelFontName("宋體");
}
}
參考
【1】表不存在:https://blog.csdn.net/weixin_43770545/article/details/101197861
【2】依賴衝突:https://www.cnblogs.com/jiangwz/p/9711998.html
【3】解決idea的流程圖不能生成圖片:https://blog.csdn.net/qq_35357001/article/details/76906353