java - SpringBoot 和 DynamoDb-Local Embedded

标签 java unit-testing junit spring-boot amazon-dynamodb

我有一个 spring-boot (1.2.6) webapp。我使用 DynamoDb 作为应用程序的事件存储。在我的集成测试中,我想使用 this approach从我的集成测试代码启动 DynamoDb-Local。
但是,在包含依赖项之后:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>DynamoDBLocal</artifactId>
    <version>1.10.5.1</version>
</dependency>

运行集成测试时会出现以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
(....)
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jettyEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedJetty.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory]: Factory method 'jettyEmbeddedServletContainerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext
(....)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jettyEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedJetty.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory]: Factory method 'jettyEmbeddedServletContainerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext
(....)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory]: Factory method 'jettyEmbeddedServletContainerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext
(....)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext
(....)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.webapp.WebAppContext

我什至没有在我的集成测试中添加任何代码,我实际上只是在我的 POM 中添加了存储库和依赖项(如上面链接的 AWS 论坛公告中所述)。没有这种依赖,一切都运行得很好。如果需要,我可以附上我的 POM。有什么想法吗?

最佳答案

com.amazonaws:DynamoDBLocal 依赖于一些 Jetty。 Jetty 在类路径上的存在使 Spring Boot 感到困惑,认为您想要使用 Jetty,即使它需要的 Jetty 的所有部分都不可用。这是 Spring Boot 中的一个错误。感谢您让我们知道这件事。我打开了an issue以便我们修复它。

与此同时,您可以通过向应用程序添加一个明确告诉 Spring Boot 您想要使用 Tomcat 的 bean 来解决此问题:

@Bean
public EmbeddedServletContainerFactory tomcatContainerFactory() {
    return new TomcatEmbeddedServletContainerFactory();
}

关于java - SpringBoot 和 DynamoDb-Local Embedded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32862876/

相关文章:

java - Grails 中的时区转换导致错误的日期

.net - 最佳实践 : Organize Unit Tests

unit-testing - 如何执行 XSLT 样式表的自动化测试?

unit-testing - 为此方法编写 JunitTestCases 的合适方法是什么

java - 将扩展名为 .ats 的二进制文件转换为字节数组

java - 不允许使用站点注入(inject)扩展方法到 Java 8 的设计考虑是什么?

与流映射的 Java 8 列表

c# - 使用 .Net WebRequest 工厂

unit-testing - 用于单元测试的 MR-Unit 与 JUnit

java - 创建 JTable 的 Junit 测试是否良好?