我在maven pom中使用spring-boot并添加了spring-web依赖项,以利用RestTemplate。
spring-boot
spring-web
RestTemplate
现在spring尝试初始化一个EmbeddedServletContext。我该如何预防?
EmbeddedServletContext
Exception in thread "main" 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. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ... 8 more
供参考:《Spring Boot参考指南》中记录了该用例:
并非所有的Spring应用程序都必须是Web应用程序(或Web服务)。如果您想在一个main方法中执行一些代码,又要引导一个Spring应用程序来设置要使用的基础架构,那么使用SpringApplicationSpring Boot 的功能很容易。A 根据是否认为需要Web应用程序来SpringApplication更改其ApplicationContext类。您可以做的第一件事就是让servlet API依赖项脱离类路径。如果您不能执行此操作(例如,您从同一代码库运行2个应用程序),则可以显式调用SpringApplication.setWebEnvironment(false)或设置applicationContextClass属性(通过Java API或使用外部属性)。可以将您要作为业务逻辑运行的应用程序代码实现为,CommandLineRunner然后作为@Bean 定义。
main
SpringApplication
ApplicationContext
SpringApplication.setWebEnvironment(false)
applicationContextClass
CommandLineRunner
@Bean
application.properties:
spring.main.web-environment=false #webEnvironment property