2015-04-22 4 views
20

मैं spring-boot उपयोग कर रहा हूँ और Maven पोम में spring-web निर्भरता कहा, RestTemplate का उपयोग करना।बसंत-वेब के लिए वसंत-बूट स्वत: कॉन्फ़िगरेशन को कैसे रोकें?

अब वसंत एक 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 

उत्तर

25

संदर्भ के लिए: यह उपयोग के मामले Spring Boot Reference Guide में दर्ज है:

सब वसंत अनुप्रयोगों की जरूरत नहीं वेब अनुप्रयोग (या वेब सेवाएं) बनें। यदि आप एक main विधि में कुछ कोड निष्पादित करने के लिए, लेकिन यह भी उपयोग करने के लिए बुनियादी सुविधाओं की स्थापना के लिए एक स्प्रिंग आवेदन bootstrap चाहते हैं, तो यह वसंत बूट की SpringApplication सुविधाओं के साथ आसान है। SpringApplication इसके ApplicationContext कक्षा को इस पर निर्भर करता है कि क्या यह सोचता है कि इसे किसी वेब एप्लिकेशन की आवश्यकता है या नहीं। पहली बात यह है कि आप इसे मदद करने के लिए कर सकते हैं केवल क्लासपाथ से सर्वलेट एपीआई निर्भरताओं को छोड़ना है। आप ऐसा नहीं कर सकते हैं (उदा आप एक ही कोड के आधार से 2 अनुप्रयोग चल रहे हैं) तो आप स्पष्ट रूप से SpringApplication.setWebEnvironment(false) कॉल कर सकते हैं, या (बाहरी गुण जावा एपीआई के माध्यम से या के साथ) applicationContextClass गुण सेट। एप्लिकेशन कोड जिसे आप अपने व्यावसायिक तर्क के रूप में चलाने के लिए चाहते हैं उसे CommandLineRunner के रूप में कार्यान्वित किया जा सकता है और @Bean परिभाषा के रूप में संदर्भ में गिरा दिया जा सकता है।

application.properties:

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

पहले चाल:

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

दूसरा:

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

मैं 'कोशिश की @EnableAutoConfiguration (को बाहर = WebMvcAutoConfiguration.class, EmbeddedServletContainerAutoConfiguration.class})' लेकिन अब भी वही त्रुटि ... यह अच्छा होगा 'वसंत-web' के लिए स्वत: विन्यास को संशोधित करने के बिना एनोटेशन द्वारा अक्षम किया जा सकता है अगर मेरा मुख्य स्टार्टर विधि ... – membersound

+0

हालांकि आपका सुझाव काम करता है, धन्यवाद! लेकिन किसी भी तरह से केवल ऑटोकॉन्फिगरेशन एनोटेशन को निष्क्रिय करना अच्छा होगा। – membersound

+6

'spring.main.web_environment = FALSE' हालांकि बेहतर है ... किसी भी जावा :-) –

1

यद्यपि वेब वातावरण अक्षम करने (टिम का जवाब @ में उल्लेख किया) की विरासत तरह से अभी भी वसंत बूट 2.x में काम करता है, लेकिन नए पसंदीदा तरीका कर रहा है निम्नलिखित संपत्ति

spring.main.web-application-type=none

Here की स्थापना enum कि अनुमति प्राप्त मान को परिभाषित करता है

+0

लिंक किया गया पृष्ठ 'spring.main.web-application-type' प्रॉपर्टी के बारे में कोई जानकारी नहीं देता है (हालांकि जब मैं इसे लिखता हूं), वैध मान भी नहीं हैं। 'स्प्रिंग वेब ऐप्लिकेशंस टाइप एपीआई' के लिए गुगलिंग से पता चलता है कि वैध मान 'सर्वलेट', 'प्रतिक्रियाशील' और 'कोई नहीं' हैं (जैसे कम-मामले के साथ, मुझे लगता है)। – ddekany

+0

@ddekany उन्होंने दस्तावेज़ीकरण को बदलना होगा। इस पर ध्यान दिलाने के लिए धन्यवाद! – geoand

संबंधित मुद्दे