我一直在努力解决与Spring Boot相关的问题,由于我对Spring不太熟悉,所以我想在这里寻求一些帮助。
我有一个基于Spring Boot的Java应用程序,它作为守护程序运行,并向远程服务器发出一些GET请求(只充当客户端)。
但是,我的Spring Boot应用程序在内部启动了一个嵌入式Tomcat容器。我的理解是,如果Java应用程序充当服务器,则需要Tomcat。但是,我的应用程序仅作为远程机器的GET API的消费者,为什么需要嵌入式Tomcat?
在我的POM文件中,我指定了spring-boot-starter-web,假设即使进行GET调用也需要它。
但是,在禁用嵌入式Tomcat方面进行了一些研究后,我找到了一个解决方案。
要进行以下更改:
@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class,
WebMvcAutoConfiguration.class})
在application.yml中使用&
spring:
main:
web-environment: false
应用程序.yml更改后,我的jar文件没有启动,直接中止,甚至没有在logback日志中记录任何内容。
现在,如果我删除应用程序.yml更改,我的jar文件就会启动(只有在@SpringBoot应用程序注释的第一次更改时),但会发生某些异常。
[main] o.s.boot.SpringApplication : Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
我的疑问如下:
1)对于仅向远程机器发出GET API调用的应用程序,是否真的需要使用Tomcat(无论是独立还是嵌入式)?
2)我该如何克服这个异常并安全地删除嵌入式Tomcat,同时仍能执行GET API调用?
spring-boot-starter-web
,只需使用基本的spring-boot-starter
并添加spring-web
依赖即可。 - Paul Grime