Activiti启动项目不能自动创建和更新表的问题

本文介绍了一个Activiti工作流引擎配置中出现的问题及解决方案。通过调整数据库表前缀的大小写,解决了启动时出现的表不存在错误。

activiti配置文件的配置如下:

<!-- spring负责创建流程引擎的配置文件 -->

    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <!-- 数据源 -->
        <property name="dataSource" ref="multipleDataSource" />
        <!-- 配置事务管理器,统一事务 -->
        <property name="transactionManager" ref="txManager" />
        <!-- 设置建表策略,如果没有表,自动创建表 -->
        <property name="databaseSchema" value="act"/>
        <property name="databaseSchemaUpdate" value="true" />

    </bean>

根据activiti官方文档的配置要求来看,没有什么问题,但是启动后报错

### The error may exist in org/activiti/db/mapping/entity/Property.xml 

### The error may involve defaultParameterMap 

### The error occurred while setting parameters 

### SQL: select VALUE_ from ACT_GE_PROPERTY where NAME_ = 'schema.version' 

### Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在


将配置文件改为如下的配置,问题就解决啦

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <!-- 数据源 -->
        <property name="dataSource" ref="multipleDataSource" />
        <!-- 配置事务管理器,统一事务 -->
        <property name="transactionManager" ref="txManager" />
        <!-- 设置建表策略,如果没有表,自动创建表  修改这个地方为大写 -->
        <property name="databaseSchema" value="ACT"/>
        <property name="databaseSchemaUpdate" value="true" />
    </bean>



### 3.1 检查依赖版本与兼容性 在 Spring Boot 3 项目整合 Activiti 7.1.0.M4 时,若启动后未生成 Activiti 的数据库结构,首先应确认依赖版本的兼容性。Activiti 7.1.0.M4 是一个早期的里程碑版本,可能存在与 Spring Boot 3 的兼容性问题。建议使用 Activiti 7.1.0.M6 或更高版本,以获得更好的 Spring Boot 3 支持。 Maven 示例: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> </dependency> ``` ### 3.2 确认数据库配置是否正确 Activiti 依赖数据库自动创建 25 张。在 `application.properties` 或 `application.yml` 中配置数据库连接信息时,需确保配置正确且数据库可访问。例如,使用 H2 内存数据库时,配置如下: ```properties spring.datasource.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1 spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=update ``` 如果使用 MySQL 或 PostgreSQL,需确保数据库服务正常运行,并配置正确的驱动连接参数。 ### 3.3 检查 Activiti 自动部署配置 Activiti 默认会在启动自动部署流程定义,并创建所需的数据库结构。若未生成结构,可能是因为未启用自动部署功能。在 `application.properties` 中添加以下配置以确保 Activiti 启动时检查流程定义并自动创建: ```properties activiti.check-process-definitions=true activiti.history-level=full ``` ### 3.4 查看日志输出以排查错误 启动应用时,需仔细查看日志输出,特别是与数据库连接结构创建相关的日志。例如,Activiti 会输出类似 `Creating tables` 的日志信息。若未出现该信息,可能示数据库连接失败或未正确配置。 日志示例: ``` INFO o.a.e.i.b.ProcessEngineConfigurationImpl - Creating tables... INFO o.a.e.i.b.ProcessEngineConfigurationImpl - Tables created successfully ``` 若日志中出现数据库连接失败或权限问题,需检查数据库配置用户权限。 ### 3.5 手动执行建脚本 若自动创建结构失败,可尝试手动执行 Activiti 提供的建脚本。Activiti 提供了针对不同数据库的 SQL 脚本,位于 `org.activiti.engine.impl.db.create` 包中。例如,对于 H2 数据库,可执行以下 SQL 脚本: ```sql -- H2 数据库建脚本 CREATE TABLE ACT_RE_DEPLOYMENT (ID_ VARCHAR(64), NAME_ VARCHAR(255), CATEGORY_ VARCHAR(255), TENANT_ID_ VARCHAR(255), GEOMETRY_ TEXT, PRIMARY KEY (ID_)); CREATE TABLE ACT_RE_MODEL (ID_ VARCHAR(64), REV_ INTEGER, NAME_ VARCHAR(255), KEY_ VARCHAR(255), CATEGORY_ VARCHAR(255), CREATE_TIME_ TIMESTAMP, LAST_UPDATED_TIME_ TIMESTAMP, VERSION_ INTEGER, META_INFO_ VARCHAR(4000), DEPLOYMENT_ID_ VARCHAR(64), EDITOR_SOURCE_VALUE_ID_ VARCHAR(64), EDITOR_SOURCE_EXTRA_VALUE_ID_ VARCHAR(64), TENANT_ID_ VARCHAR(255), PRIMARY KEY (ID_)); -- 其他结构定义... ``` ### 3.6 确保数据库用户权限充足 在生产环境中,若数据库用户权限不足,可能导致 Activiti 无法自动创建结构。需确保数据库用户具有创建、索引、视图等操作的权限。例如,在 MySQL 中,可执行以下命令授予用户权限: ```sql GRANT ALL PRIVILEGES ON activiti.* TO &#39;activiti_user&#39;@&#39;localhost&#39;; FLUSH PRIVILEGES; ``` ### 3.7 检查 Activiti 数据库配置是否冲突 在某些情况下,Spring Boot 项目中可能同时配置了多个数据源,导致 Activiti 无法正确识别主数据源。此时需在配置文件中明确指定 Activiti 使用的数据源: ```properties spring.activiti.datasource=default ``` 或者通过 Java 配置类显式配置数据源: ```java @Configuration public class ActivitiConfig { @Bean public DataSource activitiDataSource(DataSourceProperties dataSourceProperties) { return dataSourceProperties.initializeDataSourceBuilder().build(); } } ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值