H2 数据库中的错误,同时运行多个测试

Posted

技术标签:

【中文标题】H2 数据库中的错误,同时运行多个测试【英文标题】:Error in H2 Database, while running multiple tests 【发布时间】:2013-01-23 09:04:43 【问题描述】:

当我单独运行每个测试时,它就会通过。但是,当我运行所有测试时,它们都失败了。下面是一个此类实例的堆栈跟踪。

还有其他测试也会失败,但也有类似的异常。我已经尝试了这里建议的所有方法,例如使用 MVCC=trueDB_CLOSE_DELAY=-1,但仍然不行。

原因:org.springframework.beans.factory.BeanCreationException:创建名为“dataSource”的bean时出错:FactoryBean在创建对象时抛出异常;嵌套异常是 com.copyright.rup.common.test.integ.db.embedded.exceptions.EmbeddedDatabaseOperationException: liquibase 更新操作时出现异常(使用了 classResourceAccessor) 在 org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) 在 org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:305) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) ... 77 更多 引起:com.copyright.rup.common.test.integ.db.embedded.exceptions.EmbeddedDatabaseOperationException:liquibase 更新操作时出现异常(使用了classResourceAccessor) 在 com.copyright.rup.common.test.integ.db.embedded.AbstractEmbeddedDatabaseFactory.liquibaseUpdate(AbstractEmbeddedDatabaseFactory.java:391) 在 com.copyright.rup.common.test.integ.db.embedded.AbstractEmbeddedDatabaseFactory.liquibaseUpdate(AbstractEmbeddedDatabaseFactory.java:340) 在 com.copyright.rup.common.test.integ.db.embedded.AbstractEmbeddedDatabaseFactory.getDataSource(AbstractEmbeddedDatabaseFactory.java:274) 在 com.copyright.rup.common.test.integ.db.embedded.AbstractEmbeddedDatabaseFactory.getObject(AbstractEmbeddedDatabaseFactory.java:100) 在 com.copyright.rup.common.test.integ.db.embedded.AbstractEmbeddedDatabaseFactory.getObject(AbstractEmbeddedDatabaseFactory.java:46) 在 org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) ... 82 更多 引起:liquibase.exception.ValidationFailedException:验证失败: 77 个变更集校验和 work_type_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:c0c8b703ac39eb37665a5dd644ce7a12 work_threshold_init.groovy::2012-05-03::Stanislau Halauniou 现在是:3:bd533b8b09be4268b1fe97504bd6fa4e doc_path_filter_init.groovy::2012-05-08::Stanislau Halauniou 现在是:3:c85d1a0012f4cf7e5d8a4c686ce82659 doc_path_filter_limiter_init.groovy::2012-07-10::Alena Lakhava 现在是:3:5f7a9461182ee6ab3add8106e47405e5 article_work_field_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:9841a4f8c52f68ab926fca5f168ad741 chapter_work_field_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:fb3d017b5a3fe6789ab7fbc24e4e48c6 monograph_work_field_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:40a323a8ac4631c1d18c83c214ebd4ac serial_work_field_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:ac9884af8e320db12adf4dec775df4e3 unknown_work_field_init.groovy::2012-08-23::Alena Lakhava 现在是:3:48fd4b4eda29cf2a9efaac0ae37e92b7 article_work_cluster_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:81de239c26df91a5d97d97369eb4d8bf chapter_work_cluster_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:ada1c0f7ce572949bbe438de1038cbb7 monograph_work_cluster_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:918ebd67302a8d1d6e1713190e388853 serial_work_cluster_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:dae5b3a7dd01f8000d7bd6bab2ae774d unknown_work_cluster_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:a51bdf3048e00f81b4fcb252a19afdd6 work_media_type_category_init.groovy::2012-06-04::Stanislau Halauniou 现在是:3:922e6e52392fc57c5983f8be9efd02e0 work_media_type_init.groovy::2012-06-04::Stanislau Halauniou 现在是:3:df6de50d4d6f63dbb85aa1a5dafc4b1b article_work_weight_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:f4e147ce3e11499d41e6936d6561329e chapter_work_weight_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:4514f9cec46e4da5394d1aae20b22013 monograph_work_weight_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:c3bad504efd5872b08d152a5ddca6d28 serial_work_weight_init.groovy::2012-05-02::Stanislau Halauniou 现在是:3:c612131e966e0f2040f6e39e8278c234 unknown_work_weight_init.groovy::2012-08-23::Alena Lakhava 现在是:3:aa63b9aa1df5a2fc0bb249bf90d5d8d0 article_declarations_init.groovy::2012-05-03::Stanislau Halauniou 现在是:3:d153805de41a3f904f5a3ce4aff2646a article_doi_rule_init.groovy::2012-05-03::Stanislau Halauniou 现在是:3:e020f0fe8fc0ebd91862ce4a2c8e2652 article_hostissn_rule_init.groovy::2012-05-03::Stanislau Halauniou 现在是:3:bda67f8cdae5535bd74483ae1881abdf article_issue_rule_init.groovy::2012-05-03::Stanislau Halauniou 现在是:3:bdeac2f4015e9476c44d287c07108108 article_normedcontributor_rule_init.groovy::2012-05-03::Stanislau Halauniou 现在是:3:7187ab567461e2991835ef7facd28b13

【问题讨论】:

你的数据库 URL 是什么? 我的数据库属性当前设置为:PostgreSQL-1 1OFF 我认为将所有属性附加到数据库 URL 本身更安全:jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;AUTOCOMMIT=OFF 【参考方案1】:

See the documentation for database URLs.

您正在使用内存数据库。打开第二个连接将为您提供一个新数据库。

相反,我建议使用持久性数据库,或命名的内存数据库。

【讨论】:

我目前正在使用一个命名的内存数据库。它的 jdbc:h2:mem:tests 好的,当与DB_CLOSE_DELAY=-1结合使用时应该可以工作(是吗?)。 您认为 DB_CLOSE_ON_EXIT=FALSE 会解决问题吗? 进程停止时,内存中的数据库无论如何都会消失,所以:没有。 嗯,是的,首先尝试一个持久化数据库:jdbc:h2:/data/db/tests。如果这项工作(并且只有那时)可以尝试在内存中。并阅读文档。【参考方案2】:

**

如果多个类尝试访问相同的资源,则会出现此错误。最好将它们保存在不同的包中,然后执行它们

**

【讨论】:

以上是关于H2 数据库中的错误,同时运行多个测试的主要内容,如果未能解决你的问题,请参考以下文章

与内存数据库中的同一个 H2 建立多个连接[重复]

H2 数据库错误 未知数据类型 INTERVAL

测试h2数据库连接

H2 数据库 - 错误消息中的 SELECTIVITY 是啥意思

java~springboot~h2数据库在单元测试中的使用

Mysql兼容的内存数据库中的查询错误(h2)