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