org.activiti.engine.impl.db.DbSqlSession - problem during schema drop, statement drop index ACT_IDX_

本文详细介绍了当使用Activiti引擎删除数据表时,遇到因外键引用导致的错误问题,并提供了手动删除表、修改配置文件及启动引擎的解决方法。同时解释了databaseSchemaUpdate属性的不同取值及其作用。

来源:http://www.hxstrive.com/article/126.htm

 

从下面抛出的异常信息可以看出,activiti在删除activiti数据表时出现外键引用的错误,这个错误可能是我们无意删除了activiti表中某些外键引用的数据,造成activiti在删除数据表时,抛出这个错误。

错误信息:
7 [main] INFO org.activiti.engine.ProcessEngines - Initializing process engine using configuration 'file:/F:/Project_All/Eclipase_Workspace/Activiti_test01/bin/activiti.cfg.xml'
7 [main] INFO org.activiti.engine.ProcessEngines - initializing process engine for resource file:/F:/Project_All/Eclipase_Workspace/Activiti_test01/bin/activiti.cfg.xml
2015-2-14 9:20:40 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from resource loaded through InputStream
5562 [main] INFO org.activiti.engine.impl.db.DbSqlSession - performing drop on engine with resource org/activiti/db/drop/activiti.mysql.drop.engine.sql
12467 [main] ERROR org.activiti.engine.impl.db.DbSqlSession - problem during schema drop, statement drop index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'activiti.act_ru_variable' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
at com.mysql.jdbc.Util.getInstance(Util.java:382)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2570)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:779)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:622)
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:930)
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:881)
at org.activiti.engine.impl.db.DbSqlSession.executeMandatorySchemaResource(DbSqlSession.java:698)
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaDrop(DbSqlSession.java:679)
at org.activiti.engine.impl.db.DbSqlSession.performSchemaOperationsProcessEngineBuild(DbSqlSession.java:1000)
at org.activiti.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:25)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
at org.activiti.engine.impl.ProcessEngineImpl.<init>(ProcessEngineImpl.java:72)
at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:363)
at org.activiti.engine.ProcessEngines.buildProcessEngine(ProcessEngines.java:194)
at org.activiti.engine.ProcessEngines.initProcessEnginFromResource(ProcessEngines.java:167)
at org.activiti.engine.ProcessEngines.init(ProcessEngines.java:98)
at org.activiti.engine.ProcessEngines.getProcessEngine(ProcessEngines.java:224)
at org.activiti.engine.ProcessEngines.getDefaultProcessEngine(ProcessEngines.java:217)
at com.bug315.ActivitiTest01.main(ActivitiTest01.java:15)
17427 [main] ERROR org.activiti.engine.impl.db.DbSqlSession - problem during schema drop, statement alter table ACT_RU_VARIABLE
drop FOREIGN KEY ACT_FK_VAR_EXE

解决办法:
手动将activiti的所有表删除,然后修改activiti.cfg.xml配置文件中的databaseSchemaUpdate=“drop-create”,最后启动activiti引擎,此时会出现表不存在等错误,因为表已经被你手动删除了。执行完后,再启动activiti引擎,这个问题就不再抛出了。

databaseSchemaUpdate属性的取值:
flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。
true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。
create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)。
drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)。

 

 

解决 `org.activiti.engine.impl.db.DbSqlSession.dbSchemaUpdate` 方法中出现 `java.lang.NullPointerException` 异常,可从以下方面着手: ### 数据库连接与配置 - **数据源配置**:确保数据源配置无误,包括数据库的 URL、用户名、密码等。错误的数据源配置可能导致在 `dbSchemaUpdate` 方法中获取数据库连接时出现 `NullPointerException`。 ```xml <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/activiti_db"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean> ``` - **JDBC 驱动版本**:使用合适的 JDBC 驱动版本,不同版本的驱动可能存在兼容性问题。如引用[3]中提到,5.1.40 版本的 JDBC 驱动报错,而 5.1.47 版本正常。 ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> ``` ### 数据库表结构与数据 - **表结构完整性**:保证数据库中 Activiti 相关的表结构完整。若表结构缺失或损坏,在 `dbSchemaUpdate` 方法执行时可能会出现空指针异常。如引用[1]中提到,虽已导入表结构,但仍可能存在问题,需仔细检查。 - **表数据情况**:避免删除 Activiti 的所有表数据,如引用[2]中,删除所有表数据后引发了 `NullPointerException`。若确实需要清理数据,要确保不会影响 `dbSchemaUpdate` 方法的正常执行。 ### 日志与调试 - **日志级别调整**:将日志级别调整为 `DEBUG`,获取更详细的错误信息,定位 `NullPointerException` 具体发生的位置。 ```properties logging.level.org.activiti=DEBUG ``` - **代码调试**:在 `DbSqlSession.dbSchemaUpdate` 方法中添加断点,进行调试,查看具体哪个对象为 `null`,从而找到问题根源。 ### 版本兼容性 确保 Activiti 及其相关依赖的版本兼容,不兼容的版本可能导致某些方法或属性无法正常工作,引发空指针异常。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值