У меня есть приложение 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.