跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何搭建Java的工作流环境_Activiti流程引擎数据库初始化

Activiti 7 默认不自动建表,需显式配置 spring.activiti.schema-generation-enabled=true;MySQL 8+ 必须使用 com.mysql.cj.jdbc.Driver 驱动并添加 serverTimezone=UTC 等参数,否则初始化失败。 Activiti 7 默认不自动建表,必须显式配置 schema-generation Activiti 7(基于 Spring Boot)不会像旧版那样靠
activiti.cfg.xml
自动执行 DDL。它依赖 Spring Boot 的 JPA/Hibernate 行为,但默认关闭了自动建表——哪怕你写了
spring.jpa.hibernate.ddl-auto=create
,Activiti 的专用表也不会被创建。 根本原因是:Activiti 7 把流程引擎和数据访问层解耦了,
ProcessEngine
不再直接绑定 Hibernate SessionFactory;它的元数据表由独立的
activiti-spring-boot-starter-process
管理,且默认跳过初始化。 必须在
application.yml
中启用:
spring.activiti.schema-generation-enabled=true
对应属性名不是
spring.jpa.*
下的,也不是
activiti.*
(旧版前缀),而是
spring.activiti.*
(注意前缀是
spring.
) 若用 H2 做开发库,建议同时加:
spring.activiti.database-schema-update=true
(仅限开发,生产禁用) MySQL 8+ 需手动处理时区与驱动类名 连 MySQL 时常见报错:
The server time zone value 'XXX' is unrecognized
或启动失败提示
Failed to determine embedded database driver class
,本质是 JDBC URL 缺少时区参数、或用了老版驱动类名。 Activiti 7 要求 JDK 8+、MySQL Connector/J 8.0+,而新版驱动类名已从
com.mysql.jdbc.Driver
改为
com.mysql.cj.jdbc.Driver
,且强制要求指定服务端时区。 立即学习 “ Java免费学习笔记(深入) ”; Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 JDBC URL 必须带
?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.driver-class-name
必须设为
com.mysql.cj.jdbc.Driver
如果误用
com.mysql.jdbc.Driver
,Spring Boot 2.3+ 会静默忽略数据源配置,导致 Activiti 初始化时找不到连接池,抛
No qualifying bean of type 'javax.sql.DataSource'
表名大小写敏感引发的“找不到 ACT_GE_PROPERTY”错误 Linux/Unix 下 MySQL 默认开启
lower_case_table_names=0
,而 Activiti 生成的表名全小写(如
act_ge_property
),但某些环境里应用代码里写的 SQL 却引用了大写名(比如旧文档残留、IDE 自动生成的 mapper),结果查不到记录,日志里反复刷
Table 'ACT_GE_PROPERTY' doesn't exist
(注意这里是大写)。 这不是 Activiti 的 bug,是 MySQL 服务端配置和客户端预期不一致。Hibernate 默认用小写生成表,但 MyBatis 或自定义 SQL 若硬编码大写表名,就会撞上这个坑。 最稳方案:MySQL 启动时加
--lower-case-table-names=1
(重启生效,不可动态改) 临时绕过:在
application.yml
中加
spring.activiti.database-schema-update=true
并确保首次启动时数据库为空——这样 Activiti 会按自己规则建一次全小写表 别信网上“把 SQL 全改成大写”的改法,Activiti 内部校验逻辑认的是小写名,改了反而初始化失败 多数据源下 Activiti 只认 spring.datasource,不支持 customDataSource Bean 如果你项目里定义了多个
@Bean DataSource
(比如一个业务库、一个日志库),然后想让 Activiti 用其中某一个,直接
@Primary
或
@Qualifier("xxx")
是没用的。Activiti 7 的自动配置只读
spring.datasource.*
配置项,完全忽略 Spring 容器里的其他
DataSource
Bean。 这意味着:就算你写了
@Bean @Primary DataSource activitiDataSource()
,只要
spring.datasource.url
没配,Activiti 就会 fallback 到嵌入式 H2,或者直接启动失败。 唯一有效方式:所有数据库连接参数必须走
spring.datasource.*
配置项(包括 url、username、password、driver-class-name) 如果真要隔离数据源,得关掉自动配置:
@SpringBootApplication(exclude = {ActivitiProcessAutoConfiguration.class})
,再手写
ProcessEngineConfiguration
,代价是失去全部 starter 的便利性 别试图通过
spring.activiti.datasource.*
来覆盖——这个配置项根本不存在,文档里也没有 Activiti 的数据库初始化不是“配完就能跑”的事,它卡在 Spring Boot 自动配置、JDBC 驱动契约、MySQL 服务端行为三者的交界处。最容易漏的是
spring.activiti.schema-generation-enabled=true
这一行,以及 MySQL 8 的驱动类名和时区参数——这两个点没对齐,后面所有流程部署都会卡在“找不到引擎实例”。

相关文章