2015-02-26 28 views
13

में वसंत-डेटा-मोंगोडब ऑटोकॉन्फ़िगरेशन को कैसे अक्षम करें क्या किसी ने स्प्रिंग-बूट में मोंगोडब के लिए स्वत: कॉन्फ़िगरेशन अक्षम करने का प्रयास किया है?स्प्रिंग-बूट

मैं बसंत-डेटा-मगोडब के साथ वसंत-बूट की कोशिश कर रहा हूं; जावा आधारित विन्यास का उपयोग करना; वसंत-बूट 1.2.1.RELEASE का उपयोग करके, मैं वसंत-बूट-स्टार्टर-वेब और निर्भरता प्रबंधन के लिए इसके 'मूल पोम आयात करता हूं। मैं वसंत-डेटा-मोंगोडब भी आयात करता हूं (स्प्रिंग-बूट-स्टार्टर-मोंगोडब भी कोशिश करता हूं)।

मुझे दो अलग-अलग मोंगोडीबी सर्वर से कनेक्ट करने की आवश्यकता है। तो मुझे मोंगो कनेक्शन, मोंगो टेम्पलेट इत्यादि के लिए उदाहरणों के दो सेट कॉन्फ़िगर करने की आवश्यकता है। मैं ऑटो कॉन्फ़िगरेशन को भी अक्षम करना चाहता हूं। चूंकि मैं एकाधिक सर्वर से कनेक्ट कर रहा हूं, इसलिए मुझे एक डिफ़ॉल्ट मोंगो टेम्पलेट और ग्रिडएफएस टेम्पलेट बीन ऑटोकॉन्फ़िगर करने की आवश्यकता नहीं है।

मेरा मुख्य वर्ग इस तरह दिखता है:

@Configuration 
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) 
@ComponentScan 
//@SpringBootApplication // @Configuration @EnableAutoConfiguration @ComponentScan 
public class MainRunner { 

    public static void main(String[] args) { 
     SpringApplication.run(MainRunner.class, args); 
    } 
} 

मेरे दो मोंगो विन्यास कक्षाएं इस तरह दिखेगा:

@Configuration 
@EnableMongoRepositories(basePackageClasses = {Test1Repository.class}, 
     mongoTemplateRef = "template1", 
     includeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Test1Repository")} 
) 
public class Mongo1Config { 

    @Bean 
    public Mongo mongo1() throws UnknownHostException { 
     return new Mongo("localhost", 27017); 
    } 

    @Primary 
    @Bean 
    public MongoDbFactory mongoDbFactory1() throws UnknownHostException { 
     return new SimpleMongoDbFactory(mongo1(), "test1"); 
    } 

    @Primary 
    @Bean 
    public MongoTemplate template1() throws UnknownHostException { 
     return new MongoTemplate(mongoDbFactory1()); 
    } 
} 

और

@Configuration 
@EnableMongoRepositories(basePackageClasses = {Test2Repository.class}, 
     mongoTemplateRef = "template2", 
     includeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Test2Repository")} 
) 
public class Mongo2Config { 

    @Bean 
    public Mongo mongo2() throws UnknownHostException { 
     return new Mongo("localhost", 27017); 
    } 

    @Bean 
    public MongoDbFactory mongoDbFactory2() throws UnknownHostException { 
     return new SimpleMongoDbFactory(mongo2(), "test2"); 
    } 

    @Bean 
    public MongoTemplate template2() throws UnknownHostException { 
     return new MongoTemplate(mongoDbFactory2()); 
    } 
} 

इस सेटअप सब कुछ काम करता है के साथ। अगर मैं mongoDbFactory1 और टेम्पलेट 1 बीन्स से @ प्राथमिक टिप्पणियां हटा देता हूं, तो एप्लिकेशन अपवाद के साथ विफल हो जाएगा जो ऑटोकॉन्फ़िगरेशन को अक्षम नहीं किया गया है। अपवाद संदेश नीचे सूचीबद्ध है:

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat 
    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:691) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:961) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:950) 
    at com.fourexpand.buzz.web.api.template.MainRunner.main(MainRunner.java:26) 
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:98) 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:75) 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:378) 
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:155) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) 
    ... 7 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.core.io.ResourceLoader org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.resourceLoader; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'gridFsTemplate' defined in class path resource [org/springframework/boot/autoconfigure/mongo/MongoDataAutoConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.data.mongodb.MongoDbFactory]: : No qualifying bean of type [org.springframework.data.mongodb.MongoDbFactory] is defined: expected single matching bean but found 2: mongoDbFactory2,mongoDbFactory1; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.data.mongodb.MongoDbFactory] is defined: expected single matching bean but found 2: mongoDbFactory2,mongoDbFactory1 
+0

आप 'SpringBootApplication' या' EnableAutoConfiguration' साथ एनोटेट किसी अन्य वर्गों है? –

+3

'MongoRepositoriesAutoConfiguration' को भी बाहर करने का प्रयास करें। –

+0

@ एंडीविल्किन्सन शर्मनाक रूप से मेरे पास स्प्रिंगबूट अनुप्रयोग के साथ एनोटेटेड एक और वर्ग था। मेरे पास एक से अधिक प्रविष्टि बिंदु थे - परीक्षण के लिए मुख्य और उत्पादन के लिए अपाचे डेमन + जेएसवीसी धावक और मैं बस उन्हें एक सामान्य स्थान पर रखने की बजाय सभी टिप्पणियों की प्रतिलिपि/चिपकाया गया ... MongoRepositories को छोड़करऑटो कॉन्फ़िगरेशन आवश्यक नहीं है ... –

उत्तर

4

के रूप में, टिप्पणी में एंडी विल्किनसन द्वारा बताया जब को बाहर की सूची के साथ EnableAutoConfiguration का उपयोग कर यकीन है कि वहाँ EnableAutoConfiguration या SpringBootApplication साथ एनोटेट कोई अन्य वर्गों रहे हैं।

0

मेरा उपयोग मामला थोड़ा अलग था। मुझे एक ही परियोजना में 2 अलग-अलग डेटाबेस की आवश्यकता थी। मैंने ऑटो कॉन्फ़िगरेशन कक्षाएं बढ़ा दीं और एक प्रोफाइल एनोटेशन जोड़ा।

@Profile("mongo") 
@Configuration 
public class CustomMongoAutoConfiguration extends MongoAutoConfiguration { 

    public CustomMongoAutoConfiguration(
     MongoProperties properties, 
     ObjectProvider<MongoClientOptions> options, 
     Environment environment) { 
     super(properties,options,environment); 
    } 
} 

और

@Profile("mongo") 
@Configuration 
@EnableConfigurationProperties(MongoProperties.class) 
public class CustomMongoDataAutoConfiguration extends MongoDataAutoConfiguration { 

    public CustomMongoDataAutoConfiguration(
     ApplicationContext applicationContext, 
     MongoProperties properties) { 
     super(applicationContext,properties); 
    } 

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