java - 为什么要加载WebMvcConfigurer?

标签 java spring-boot spring-data

我是 Spring 新手,正在使用 Postgresql/JPA 和 MongoDB 组件测试 Spring Data 项目。我的测试类有以下注释:

@SpringBootApplication
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringMongoConfig.class, PgRepository.class, MongodbRepository.class})
public class PerfTest {

  @Autowired
  private PgRepository pgRepo;

  @Autowired
  private MongodbRepository mongoRep;

出于某种原因,spring-context 模块在解析 bean 类时尝试加载 WebMvcConfigurer,给我一个 NoClassDefFoundError

Spring Boot Autoconfigure 是否尝试启动完整的 Web Controller 套件?如果是这样,为什么?我真的只是对 Spring Data 感兴趣。我应该完全避免 Spring Boot 吗?

最佳答案

您不应该将测试类注释为@SpringBootApplication。此注释用于在主代码库中定义一个类,其中包含一个 main() 方法,用于通过自动配置启动 Spring boot 容器。

如果您有兴趣测试 Spring 数据,那么您的测试将需要指向一个 @Configuration 类,该类用 @EnableJpaRepositories 注释,这将允许您的存储库接口(interface) Autowiring 。

我不知道你的 SpringMongoConfig 类中有什么,但如果它包含该注释,那么你需要做的就是:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {SpringMongoConfig.class})
public class PerfTest {

如果没有,那么您需要设置此配置并将其包含在测试的 @ContextConfiguration 中。

另一个更重量级的选项,但会保证一切都可用于您的测试(前提是您的 Spring boot 应用程序设置正确)是使用 @SpringBootTest 标记您的测试,这将自动加载应用程序的整个 Spring 启动上下文。如果找不到主类,您可以通过在注释中提供类来指出正确的方向:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyMainClass.class)
public class PerfTest {

关于java - 为什么要加载WebMvcConfigurer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51398695/

相关文章:

JavaFX ScrollPane 不随 VBox 滚动

spring - 将摘录投影添加到 Spring Data Rest 存储库会导致堆栈溢出错误

java - Spring 无法将 AOP 与嵌入式数据库脚本一起使用

hibernate - 如何为 Spring Data JPA 中的所有查询创建动态 WHERE 子句?

java - 如何编译具有 native 功能的 c 文件以通过 JNI 连接?

java - 哪些对象将传递给 Mockito 中的自定义 ArgumentMatcher

java - 如何将 Joda-Time DateTime 格式化为仅 mm/dd/yyyy?

java - SpringBoot 1.2.1 MongoRepository

java - Spring 启动+ webflux : context lost when running some steps in parallel

java - Spring Cloud 与 WSO2 API 管理器