Весенний ботинок. Класс запускается только в src / java / main, в src / java / test есть исключения - PullRequest
0 голосов
/ 06 сентября 2018
  1. У меня есть класс java / spring-boot
@SpringBootApplication
@ComponentScan(value = "ignore")
@RunWith(SpringRunner.class)
public class MyApplication {
   @Bean
   YAMLConfig myeadFromYMLFile() {
      return new YAMLConfig();
   }
   public static void main(String[] args) throws InterruptedException {
      ConfigurableApplicationContext context = 
         SpringApplication.run(MyApplication.class, args);
      YAMLConfig myBean = context.getBean(YAMLConfig.class);
      myBean.doSomething();
      myBean.printApi();
   }
}
  1. И есть файл конфигурации, который считывает данные из файла yml
@Configuration
@EnableConfigurationProperties
public class YAMLConfig {
   @Value("${refresh.rate}")
   private int refreshRate;
   @Value("${datasource.apiUrl}")
   private String apiUrl;
   public void doSomething() {
      System.out.printf("Refresh Rate : %s%n", refreshRate);
   }
   public void printApi() {
      System.out.printf("Refresh Rate : %s%n", apiUrl);
   }
   public String getApiUrl() {
      return apiUrl;
   }
}

Вопрос: когда я запускаю класс MyApplication в src / java / main, все круто. НО: когда я запускаю этот класс в src / java / test, он выходит из строя

Ошибка запуска ApplicationContext. Чтобы отобразить отчет об условиях, перезапустите приложение с включенной отладкой. 2018-09-06 17: 14: 21.389 ОШИБКА 16515 --- [main] o.s.boot.SpringApplication: сбой запуска приложения org.springframework.context.ApplicationContextException: невозможно запустить веб-сервер; Вложенным исключением является java.lang.NoClassDefFoundError: javax / servlet / http / HttpSessionIdListener at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh (ServletWebServerApplicationContext.java:155) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:544) ~ [spring-context-5.0.8.RELEASE.jar: 5.0.8.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh (ServletWebServerApplicationContext.java:140) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1258) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1246) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в MyApplication.main (MyApplication.java:19) [test-classes /: na] Вызвано: java.lang.NoClassDefFoundError: javax / servlet / http / HttpSessionIdListener в io.undertow.servlet.core.ApplicationListeners. (ApplicationListeners.java:62) ~ [undertow-servlet-1.4.25.Final.jar: 1.4.25.Final] в io.undertow.servlet.spec.ServletContextImpl.ensureNotProgramaticListener (ServletContextImpl.java:875) ~ [undertow-servlet-1.4.25.Final.jar: 1.4.25.Final] в io.undertow.servlet.spec.ServletContextImpl.getSessionCookieConfig (ServletContextImpl.java:648) ~ [undertow-servlet-1.4.25.Final.jar: 1.4.25.Final] в io.undertow.servlet.core.DeploymentManagerImpl.handleDeploymentSessionConfig (DeploymentManagerImpl.java:622) ~ [undertow-servlet-1.4.25.Final.jar: 1.4.25.Final] в io.undertow.servlet.core.DeploymentManagerImpl.deploy (DeploymentManagerImpl.java:167) ~ [undertow-servlet-1.4.25.Final.jar: 1.4.25.Final] at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.createDeploymentManager (UndertowServletWebServerFactory.java:284) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELE at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer (UndertowServletWebServerFactory.java:208) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer (ServletWebServerApplicationContext.java:179) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh (ServletWebServerApplicationContext.java:152) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] ... 8 общих кадров опущено Вызывается: java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener на java.net.URLClassLoader.findClass (URLClassLoader.java:381) ~ [na: 1.8.0_181] at java.lang.ClassLoader.loadClass (ClassLoader.java:424) ~ [na: 1.8.0_181]at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:349) ~ [na: 1.8.0_181] at java.lang.ClassLoader.loadClass (ClassLoader.java:357) ~ [na: 1.8.0_181] ... 17 общих кадров пропущено

P.S. У меня есть зависимость spring-boot-starter-web. С @SpringBootTest я получил это:

org.springframework.context.ApplicationContextException: невозможно запустить веб-сервер; Вложенным исключением является org.springframework.context.ApplicationContextException: невозможно запустить ServletWebServerApplicationContext из-за отсутствия компонента ServletWebServerFactory. at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh (ServletWebServerApplicationContext.java:155) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:544) ~ [spring-context-5.0.8.RELEASE.jar: 5.0.8.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh (ServletWebServerApplicationContext.java:140) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1258) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1246) [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] в MyApplication.main (MyApplication.java:19) [test-classes /: na] Вызвано: org.springframework.context.ApplicationContextException: невозможно запустить ServletWebServerApplicationContext из-за отсутствия компонента ServletWebServerFactory. at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory (ServletWebServerApplicationContext.java:204) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer (ServletWebServerApplicationContext.java:178) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh (ServletWebServerApplicationContext.java:152) ~ [spring-boot-2.0.4.RELEASE.jar: 2.0.4.RELEASE] ... 8 общих кадров пропущено

1 Ответ

0 голосов
/ 07 сентября 2018

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html Есть все ответы на мой вопрос. Спасибо, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...