복붙노트

[SPRING] 스프링 부트는 프로필이있는 임베디드 톰캣을 활성화 / 비활성화합니다.

SPRING

스프링 부트는 프로필이있는 임베디드 톰캣을 활성화 / 비활성화합니다.

application.properties 파일에 어떤 @Profile이 설정되어 있는지에 따라 여러 @Configuration 클래스 중 하나를 사용하는 Spring Boot 응용 프로그램을 작성하고 있습니다.

이러한 구성 클래스 중 하나는 REST 인터페이스를 사용하므로 spring-boot-starter-web을 종속성으로 포함합니다.

이것은 임베디드 Tomcat 인스턴스를 시작합니다.

문제는 다른 프로필에 내장 된 서버가 필요하지 않다는 것입니다 (예 : JMS 대신 REST 대신 들어오는 메시지를 처리하는 경우).

@SpringBootApplication이 Tomcat을 기본적으로 시작하지 못하게하고 REST Configuration 클래스에서만 사용하는 것을 막을 수있는 방법이 있습니까? 예 : 해당 클래스에 @EnableWebMVC를 사용하여 주석을 추가합니다.

다음은 @Configuration 클래스의 예입니다.

휴식:

@Profile({"REST"})
@Configuration
@EnableWebMvc
public class HttpConfiguration{
 .
 .
 .
}

JMS :

@Profile({"JMS"})
@Configuration
@EnableJms
public class JMSConfiguration{
 .
 .
 .
}

감사

해결법

  1. ==============================

    1.용도

    용도

    @SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 
                                      WebMvcAutoConfiguration.class})
    

    임베디드 서블릿 컨테이너에 대한 스프링 부트의 자동 구성을 제외합니다. 또한 REST가 아닌 경우 다음 속성을 설정하여 Spring Boot가 WebApplicationContext (서블릿 컨테이너가 필요함)를 시작하지 않도록해야합니다.

    spring.main.web-environment=false
    

    EmbeddedServletContainerAutoConfiguration.class를 가져 와서 REST 프로파일에 임베디드 Tomcat을 활성화하십시오 (REST 프로파일이로드 될 때까지 자동 구성이 지연됩니다.

    @Profile({"REST"})
    @Configuration
    @Import(EmbeddedServletContainerAutoConfiguration.class)
    public class HttpConfiguration {
        // ...
    }
    

    EmbeddedServletContainerCustomizers를 사용하는 경우 EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class도 가져와야합니다.

  2. ==============================

    2.@hzpz와 @orid의 답은 올바른 길로 나를 설정했습니다.

    @hzpz와 @orid의 답은 올바른 길로 나를 설정했습니다.

    추가해야했습니다.

    @SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 
    WebMvcAutoConfiguration.class})
    

    설정 :

    spring.main.web-environment=false
    

    non-Rest 경우에 대한 내 application.properties 파일에서.

  3. ==============================

    3.Spring Boot 2.0에서만 spring.main.web-application-type = none은 해당 프로필에서 트릭을 수행합니다.

    Spring Boot 2.0에서만 spring.main.web-application-type = none은 해당 프로필에서 트릭을 수행합니다.

    Spring 부트 2.0에서 다중 문서 application.yml을 사용하는 경우이 블록을 추가하고 웹 서버가 내장되어서는 안되는 프로필로 no-web-profile-name을 바꾸면됩니다 :

    ---
    spring:
      profiles: no-web-profile-name
      main:
        web-application-type: none
    
  4. from https://stackoverflow.com/questions/32078015/spring-boot-enable-disable-embedded-tomcat-with-profile by cc-by-sa and MIT license