activiti6 创建表失败

本文介绍在使用Activiti 6.0.0与MySQL 8.0+版本进行数据库表创建时遇到的问题及解决方法。当尝试创建表时,由于MySQL扫描所有数据库导致错误。通过设置参数nullCatalogMeansCurrent=true,限制扫描范围至当前数据库,成功避免冲突。

MySQL : 8.0 + 

activiti :  6.0.0

下面是建表的代码:

@Test
    public void createTable1() {
        // 引擎配置
        ProcessEngineConfiguration pec = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        pec.setJdbcDriver("com.mysql.cj.jdbc.Driver");
        pec.setJdbcUrl("jdbc:mysql://localhost:3306/xf_test?characterEncoding=UTF-8&serverTimezone=UTC&useUnicode=true&useSSL=false");
        pec.setJdbcUsername("root");
        pec.setJdbcPassword("root");

        /*
         * false 不能自动创建表
         * create-drop 先删除表再创建表
         * true 自动创建和更新表
         */
        pec.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

        // 获取流程引擎对象
        ProcessEngine processEngine = pec.buildProcessEngine();

    }

报错:Caused by: java.sql.SQLSyntaxErrorException: Table 'xf_test.act_ge_property' doesn't exist

解决方法: 

  加上:nullCatalogMeansCurrent=true (注意: MySQL 8.0 + 版本需要加,之前的版本应该没问题)

  含义:nullCatalogMeansCurrent为false时,会扫描当前连接的所有数据库,只要你此连接的其他数据库有activiti的这些表,就会 报错。 为 true 时,仅扫描当前指定的数据库

pec.setJdbcUrl("jdbc:mysql://localhost:3306/xf_test?characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=UTC&useUnicode=true&useSSL=false")

 

Activiti 6 的 `processEngine` bean 创建失败可能由多种原因导致,以下是一些常见的解决办法: ### 依赖注入问题 检查 `processEngine` 所依赖的 bean 是否正确初始化。若依赖的 bean 为 `null`,则会在初始化 `processEngine` 时引发 `NullPointerException`。确保在配置类中正确定义和初始化所有依赖的 bean。 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public SomeDependency someDependency() { return new SomeDependency(); } @Bean public ProcessEngine processEngine(SomeDependency someDependency) { return new ProcessEngine(someDependency); } } ``` ### 配置文件问题 检查配置文件(如 `application.properties`、`application.yml` 或 XML 配置文件)中关于 `processEngine` 的配置。确保所有必要的属性都已正确设置,缺失或错误的属性可能导致初始化失败。 ```xml <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration"/> </bean> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="dataSource" ref="dataSource"/> <property name="transactionManager" ref="transactionManager"/> <property name="databaseSchemaUpdate" value="true"/> </bean> ``` ### 初始化逻辑问题 查看 `processEngine` 的初始化逻辑,确保在初始化过程中会使用未初始化的对象或变量。可以在关键位置添加日志输出,以便排查问题。 ```java import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.spring.SpringProcessEngineConfiguration; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import org.springframework.transaction.PlatformTransactionManager; @Configuration public class ActivitiConfig { @Autowired private DataSource dataSource; @Autowired private PlatformTransactionManager transactionManager; @Bean public ProcessEngineConfiguration processEngineConfiguration() { SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration(); config.setDataSource(dataSource); config.setTransactionManager(transactionManager); config.setDatabaseSchemaUpdate("true"); return config; } @Bean public ProcessEngine processEngine() throws Exception { ProcessEngineConfiguration config = processEngineConfiguration(); return config.buildProcessEngine(); } } ``` ### 版本兼容性问题 确保所使用的 Activiti、Spring 以及相关依赖的版本兼容。兼容的版本可能会导致某些方法或属性无法正常工作,从而引发 `NullPointerException`。可以参考官方文档或社区论坛,了解各版本之间的兼容性信息。 ### 日志分析 查看详细的日志信息,定位 `NullPointerException` 具体发生的位置。可以在配置文件中提高日志级别,以便获取更详细的错误信息。 ```properties logging.level.org.activiti=DEBUG ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值