为什么要加载 WebMvcConfigurer?

我是 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模块试图WebMvcConfigurer在解析 bean 类时加载,给我一个NoClassDefFoundError.


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


www说
浏览 280回答 2
2回答

炎炎设计

您不应该将测试类注释为@SpringBootApplication. 此注释用于在主代码库中定义一个类,该类包含一个 main() 方法,用于通过自动配置启动 Spring boot 容器。如果它是您有兴趣测试的 Spring 数据,那么您的测试将需要指向一个@Configuration用@EnableJpaRepositories此注释的类,这将允许您的存储库接口自动装配。我不知道您的 SpringMongoConfig 类中有什么,但是如果它包含该注释,那么您需要做的就是:@RunWith(SpringRunner.class)@ContextConfiguration(classes = {SpringMongoConfig.class})public class PerfTest {如果没有,那么您需要设置此配置并将其包含在@ContextConfiguration测试中。另一个更重量级但可以保证所有内容都可用于您的测试的选项(假设您的 Spring boot 应用程序设置正确)是标记您的测试,@SpringBootTest这将自动加载应用程序的整个 Spring boot 上下文。如果找不到您的主类,您可以通过在注释中提供该类来将其指向正确的方向:@RunWith(SpringRunner.class)@SpringBootTest(classes = MyMainClass.class)public class PerfTest {

慕田峪9158850

您需要将@Component添加到您的存储库界面。Spring首先加载组件类,然后@AutoWiring & 变量的初始化将发生。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java