JMS 큐에서 메시지를 가져오고 일부 데이터를 로그 파일에 저장하지만 웹 서버가 필요하지 않은 간단한 Spring Boot 애플리케이션이 있습니다. 웹 서버없이 Spring Boot를 시작할 수있는 방법이 있습니까?
JMS 큐에서 메시지를 가져오고 일부 데이터를 로그 파일에 저장하지만 웹 서버가 필요하지 않은 간단한 Spring Boot 애플리케이션이 있습니다. 웹 서버없이 Spring Boot를 시작할 수있는 방법이 있습니까?
답변:
gs-convert-jar-to-war/complete
Maven 프로젝트 는spring-boot-starter-tomcat
scope로 선언 된 종속성 에도 불구하고 임베디드 Tomcat 서버를 추가합니다 provided
. 이것은 버그처럼 느껴집니다. 또한 stackoverflow.com/q/25991789/923560
서블릿 컨테이너없이 스프링 부트를 실행하고 싶지만 클래스 경로 (예 : 테스트 용)에 하나를 사용하려면 스프링 부트 문서에 설명 된대로 다음을 사용하십시오 .
@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
application.properties
완벽하게 작동합니다.
spring.main.web-environment
은 이제 더 이상 사용되지 않습니다. 여전히 Boot 2.1.1에서 작동
spring.main.web-application-type=none
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
애플리케이션에 웹 기능 (예 org.springframework.web.client.RestTemplate
: REST 호출)이 필요하지만 TOMCAT 서버를 시작하지 않으려는 경우 POM에서 제외하면됩니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
프로그램을 통해 :
ConfigurableApplicationContext ctx = new SpringApplicationBuilder(YourApplicationMain.class)
.web(WebApplicationType.NONE)
.run(args);
application.properties 파일을 통해 :
spring.main.web-environment=false
application.yml 파일을 통해 :
spring:
main:
web-environment:false
spring.io 사이트에서 "시작하기"템플릿 중 하나를 사용하고 싶지만 "기본"( "gs / spring-boot") 템플릿과 함께 제공되는 서블릿 관련 항목이 필요하지 않은 경우, 대신 스케줄링 작업 템플릿 (pom *에 spring-boot-starter 등이 포함되어 있음)을 사용해 볼 수 있습니다.
https://spring.io/guides/gs/scheduling-tasks/
그러면 Spring Boot가 제공되고 앱은 독립형으로 실행됩니다 (pom에 서블릿 또는 spring-webmvc 등이 포함되지 않음). (다른 사람이 이미 지적했듯이 JMS 관련 항목을 추가해야 할 수도 있지만) 원하는 것입니다.
[* Maven을 사용하고 있지만 Gradle 빌드도 비슷하게 작동한다고 가정합니다.]
Kotling의 경우 최근에 사용한 것입니다.
// src/main/com.blabla/ShellApplication.kt
/**
* Main entry point for the shell application.
*/
@SpringBootApplication
public class ShellApplication : CommandLineRunner {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val application = SpringApplication(ShellApplication::class.java)
application.webApplicationType = WebApplicationType.NONE
application.run(*args);
}
}
override fun run(vararg args: String?) {}
}
// src/main/com.blabla/command/CustomCommand.kt
@ShellComponent
public class CustomCommand {
private val logger = KotlinLogging.logger {}
@ShellMethod("Import, create and update data from CSV")
public fun importCsv(@ShellOption() file: String) {
logger.info("Hi")
}
}
그리고 모든 것이 정상적으로 부팅되며 내 사용자 지정 명령을 사용할 수있는 셸로 끝납니다.
Spring 부트에서 Spring Web 종속성은 임베디드 Apache Tomcat 웹 서버를 제공합니다. pom.xml에서 spring-boot-starter-web 종속성 을 제거 하면 내장 웹 서버를 제공하지 않습니다.
다음 종속성 제거
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-jms
종속성으로 추가 합니다. 그런 다음 응용 프로그램을 시작하면 서버가 시작되지 않습니다.