Activiti6--[2] 搭建入門項目

入門

安裝插件【可不安裝】

通過idea畫流程圖。在idea中的插件管理中,查找叫actiBMP的插件,安裝即可。

項目結構

activiti-1

項目依賴

<?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

啓動項目

成功啓動項目,生成表結構如下:
activiti-2

異常記錄

【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

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