0
点赞
收藏
分享

微信扫一扫

【flowable】Springboot集成flowable初始化数据结构异常解决办法

目录

环境信息

springboot: 2.3.6.RELEASE
flowable: 6.7.0

集成

pom添加依赖信息

 <dependency>
       <groupId>org.flowable</groupId>
        <artifactId>flowable-spring-boot-starter</artifactId>
        <version>6.7.0</version>
   </dependency>

另: 参考代码中涉及到使用lombok插件的内容可以通过手动编码方式还原或引入lombok依赖。

配置说明

SpringBoot集成flowable的starter后,如果已经集成了数据库相关内容,就不再需要任何设置就可以完成集成(flowable 的ProcessEngineConfiguration默认实现 SpringProcessEngineConfiguration已经完成了ataSource注入) ,如需对其进行配置,可通过Autowired注入SpringProcessEngineConfiguration或ProcessEngineConfiguration进行修改
如:


import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.flowable.spring.boot.EngineConfigurationConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Configuration;

@Slf4j
@Configuration
public class FlowableConfig implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
    @Autowired
    DataSourceProperties dataSourceProperties;
    @Override
    public void configure(SpringProcessEngineConfiguration springProcessEngineConfiguration) {
        springProcessEngineConfiguration.setJdbcUrl(dataSourceProperties.getUrl());
        springProcessEngineConfiguration.setJdbcUsername(dataSourceProperties.getUsername());
        springProcessEngineConfiguration.setJdbcPassword(dataSourceProperties.getPassword());
        springProcessEngineConfiguration.setJdbcDriver(dataSourceProperties.getDriverClassName());
        springProcessEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        log.info("url:{}",springProcessEngineConfiguration.getJdbcUrl());
        log.info("url:{}",springProcessEngineConfiguration.getDataSource());
    }

}

当然,修改连接信息亦可以通过配置文件进行配置来完成,如上只是举例获取配置对象的一种方式。

启动应用默认会新建数据结构

flowable的默认配置将会自动更新数据结构(详见org.flowable.spring.boot.FlowableProperties)
可通过如下配置进行关闭

flowable:
  database-schema-update: false

常见问题汇总与收集

1. 启动后无法正常初始化数据结构

此问题目前已知存在如下三种可能:

  1. 配置中database-schema-update 设定了false,导致自动更新被关闭,此种情况可以通过配置文件或ProcessEngineConfiguration的示例手动设置。

  2. 使用mysql5.7以上版本,数据库中已经有相关的数据结构(如有自定义修改建议手动增量修改,此处不做讨论)或其他schema存在相关表;此类问题多存在于多个环境使用同一个数据库实例,虽然分了schema,但是仍不能初始化成功;此类问题可通过jdbc中url的配置增加nullCatalogMeansCurrent=true 指定在未指定数据库目录(catalog)时,将当前数据库目录作为默认值,如:

spring:
  datasource:
    password: root
    username: root
    url: jdbc:mysql://localhost:3306/flowable?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true

当然,也可以通过限制当前使用的数据库用户权限来完成(限定当前用户无权访问其他schema下的flowable相关表)。
需要注意的时,这类问题表现方式不仅仅是相关表创建不成功,部分情况下还表现为表创建不完整等问题,此类问题建议按如下思路排查:

  • JDBC连接信息是否正确
  • 设置是否正确,如 database-schema-update、nullCatalogMeansCurrent等
  • 当报错不明晰时须优先解决日志显示问题(本测试使用日志组件为logback)
  • 适当升级或降低版本已避免版本bug引起的问题(不建议优先考虑)
  • 框架的不规范使用,此类问题常表现为相关bean未正常注入,可通过测试代码注入Bean的方式测试是否正确配置(如SpringBootTest+ Autowired)。
  1. 已知的版本bug,此类问题不常见,多半出在sql执行过程中明显的报错,可通过异常信息进行判断,此类文件建议进行小版本的升级。

附官方资料

中文资料
https://tkjohn.github.io/flowable-userguide/#_advanced
官网原版
https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot

举报

相关推荐

0 条评论