как можно запустить tomcat в зависимости от профиля в приложении весенней загрузки - PullRequest
0 голосов
/ 16 июня 2020

У меня есть приложение Spring Boot

@SpringBootApplication
@EnableConfigurationProperties
public class MyApplication
{

  /**
   * @param aArgs String[]
   */
  public static void main(String[] aArgs)
  {
    SpringApplication.run(MyApplication.class, aArgs);
  }
}

, которое использует CommandLineRunner

@Component
public class Scheduler implements CommandLineRunner
{

  public void run(String... aArgs) throws Exception
  {
    do things ...
  }
}

, которое отлично работает и периодически выполняет некоторые задачи.

Теперь я хотелось бы, чтобы это приложение дополнительно предоставляло RestController, но только при активации профилем test.

@RestController
@Profile("test")
@RequestMapping(value = "/simulator",
    produces = MediaType.APPLICATION_JSON_VALUE)
public class SimulatorController
{
  @PostMapping(value = "/do")
  public ResponseEntity<String> do()
  {
    ...
  }
}

Если я правильно понимаю, RestController должен работать с зависимостью spring-boot-starter-web должен быть включен в пом. xml.

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>

это тоже работает. В этой конфигурации tomcat запускается всегда, когда приложение запускается и контроллер доступен. На самом деле tomcat нужно запускать только тогда, когда установлен профиль test. Итак, я попробовал

new SpringApplicationBuilder(MyApplication.class).web(WebApplicationType.NONE).run(aArgs);

и

SpringApplication application = new SpringApplication(MyApplication.class);
    application.setWebApplicationType(WebApplicationType.NONE);
    application.run(aArgs);

в основном классе приложения, как указано в других таковых вопросах, но это привело к

org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем 'resourceHandlerMapping', определенным в ресурсе пути к классу [org / springframework / web / servlet / config / annotation / DelegatingWebMvcConfiguration.class]: создание экземпляра bean-компонента с помощью фабричного метода завершилось неудачно; вложенное исключение - org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.web.servlet.HandlerMapping]: заводской метод 'resourceHandlerMapping' вызвал исключение; вложенное исключение: java .lang.IllegalStateException: не задан ServletContext

Итак, мой вопрос:

можно ли запустить tomcat только тогда, когда профиль 'test 'установлен, и не запускать его в противном случае, потому что RestController в любом случае должен быть доступен только в этом случае?

Я использую весеннюю загрузку в версии 2.1.2.

...