[java] 웹 서버가없는 스프링 부트
JMS 큐에서 메시지를 가져오고 일부 데이터를 로그 파일에 저장하지만 웹 서버가 필요하지 않은 간단한 Spring Boot 애플리케이션이 있습니다. 웹 서버없이 Spring Boot를 시작할 수있는 방법이 있습니까?
답변
클래스 경로에 Tomcat 종속성이없는 경우 Spring 부트에는 임베디드 Tomcat이 포함되지 않습니다. 여기에서EmbeddedServletContainerAutoConfiguration
소스를 찾을 수 있는 수업에서이 사실을 직접 볼 수 있습니다. .
코드의 @ConditionalOnClass
핵심은 클래스 에서 주석을 사용하는 것입니다.EmbeddedTomcat
답변
서블릿 컨테이너없이 스프링 부트를 실행하고 싶지만 클래스 경로 (예 : 테스트 용)에 하나를 사용하려면 스프링 부트 문서에 설명 된대로 다음을 사용하십시오 .
@Configuration
@EnableAutoConfiguration
public class MyClass{
public static void main(String[] args) throws JAXBException {
SpringApplication app = new SpringApplication(MyClass.class);
app.setWebEnvironment(false); //<<<<<<<<<
ConfigurableApplicationContext ctx = app.run(args);
}
}
또한이 속성을 우연히 발견했습니다.
spring.main.web-environment=false
답변
스프링 부트 2.x
-
spring.main.web-application-type=NONE # REACTIVE, SERVLET
-
@SpringBootApplication public class MyApplication { public static void main(String[] args) { new SpringApplicationBuilder(MyApplication.class) .web(WebApplicationType.NONE) // .REACTIVE, .SERVLET .run(args); } }
어디 WebApplicationType를 :
NONE
-응용 프로그램은 웹 응용 프로그램으로 실행되지 않아야하며 내장 웹 서버를 시작해서는 안됩니다.REACTIVE
-애플리케이션은 반응 형 웹 애플리케이션으로 실행되어야하며 내장 된 반응 형 웹 서버를 시작해야합니다.SERVLET
-애플리케이션은 서블릿 기반 웹 애플리케이션으로 실행되어야하며 임베디드 서블릿 웹 서버를 시작해야합니다.
답변
다음과 같이 만들 수 있습니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(false).run(args);
}
}
과
@Component
public class CommandLiner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// Put your logic here
}
}
종속성은 여전히 존재하지만 사용되지는 않습니다.
답변
가장 간단한 해결책. application.properties 파일에 있습니다. 이전 답변에서 언급했듯이 다음 속성을 추가하십시오.
spring.main.web-environment = false
Spring Boot Starter 버전 2.0.0의 경우 다음 속성을 사용합니다.
spring.main.web-application-type = none
모든 속성에 대한 문서는 다음 링크를 사용하십시오. https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
답변
Spring boot v2.1.3.RELEASE의 경우 application.propertes에 다음 속성을 추가하십시오.
spring.main.web-application-type=none
답변
이 코드를 사용하십시오.
SpringApplication application = new SpringApplication(DemoApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);