2015-04-22 15 views
20

spring-boot kullanıyorum ve RestTemplate'dan yararlanmak için maven pom içinde spring-web bağımlılığı ekledim.İlkbahar-web için yay önyükleme otomatik yapılandırma nasıl engellenir?

Artık yay, EmbeddedServletContext'u başlatmaya çalışır. Bunu nasıl önleyebilirim?

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 

cevap

25

: Bu kullanım şekli Spring Boot Reference Guide belgelenmiştir:

tüm Bahar uygulamaları zorunda değil Web uygulamaları (veya web servisleri). Bazı kodları bir main yönteminde yürütmek, ancak kullanmak için altyapıyı ayarlamak üzere bir Spring uygulamasını da önyüklemek istiyorsanız, o zaman Spring Boot'un SpringApplication özellikleri ile işlemi kolaylaştırır. Bir SpringApplication bunun bir web uygulaması ihtiyacı olmadığını düşündüğü olmadığına bağlı olarak ApplicationContext sınıfını değiştirir. Yardım etmek için yapabileceğiniz ilk şey, sunucu API bağımlılıklarını sınıf yolundan çıkarmaktır. Bunu yapamazsanız (örneğin, aynı kod tabanından 2 uygulama çalıştırıyorsanız), SpringApplication.setWebEnvironment(false)'u açıkça arayın veya applicationContextClass özelliğini (Java API'sı aracılığıyla veya dış özelliklerle) ayarlayabilirsiniz. İş mantığınız olarak çalıştırmak istediğiniz uygulama kodu, CommandLineRunner olarak uygulanabilir ve içeriğe bir @Bean tanımı olarak bırakılabilir.

application.properties:

spring.main.web-environment=false #webEnvironment property 
21

İlk hüner: İkinci

public static void main(String[] args) throws Exception { 
    ConfigurableApplicationContext ctx = new SpringApplicationBuilder(Application.class) 
       .web(false) 
       .run(args); 
} 

: Referans olarak

@Configuration 
@EnableAutoConfiguration(exclude = WebMvcAutoConfiguration.class) 
public class Application { 
+0

@EnableAutoConfiguration (exclude = exclude = WebMvcAutoConfiguration.class, EmbeddedServletContainerAutoConfiguration.class}) 'ı denedim ama yine de aynı hata ... 'Spring-web' için otomatik yapılandırmanın, değişiklik yapmak zorunda kalmadan ek açıklamalarla devre dışı bırakılması güzel olurdu. Benim ana başlangıç ​​yöntemim ... – membersound

+0

Öneriniz işe yarıyor olsa da, teşekkürler! Ama her nasılsa, sadece otomatik yapılandırma yapılandırma notunu devre dışı bırakmak güzel olurdu. – membersound

+6

'spring.main.web_environment = false' daha iyidir ... Herhangi bir Java kodunu kodlamanıza gerek yok :-) –

1

(@ Tim'in cevabı belirtildiği gibi) web ortamını devre dışı bırakmanın mirası yolu hala Bahar Boot 2.x çalışmakla beraber, bununla birlikte yeni tercih edilen bir yol gereğidir aşağıdaki özellik

spring.main.web-application-type=none

Here ayar izin değerlerini tanımlayan enum olan

+0

Bağlantılı sayfa, "spring.main.web-application-type" özelliği hakkında herhangi bir bilgi vermez (bunu yazdığımda), geçerli değerlerin bile olmadığını. Spring WebApplicationType API'sı için Googling, geçerli değerlerin "servlet", "reaktif" ve "none" (daha küçük bir durumda olduğu gibi) olduğunu gösterir. – ddekany

+0

@ddekany Belgeleri değiştirmiş olmalılar. Bunu işaretlediğiniz için teşekkürler! – geoand

İlgili konular