2015-02-26 15 views
13

İlkbahar-önyükleme sırasında mongodb için otomatik yapılandırmayı devre dışı bırakmayı deneyen var mı?İlkbahar-önyüklemede yay-veri-mongodb otomatik yapılandırma nasıl devre dışı bırakılır

İlkbahar-önyüklemeli bahar veriyle çalışıyorum; Java tabanlı konfigürasyon kullanma; İlkbahar-önyükleme 1.2.1.RELEASE kullanarak, ilkbahar-önyükleme-başlatıcı-web ve onun bağımlılık yönetimi için ana pompayı ithal ediyorum. Ben de bahar-veri-mongodb ithal (bahar-boot-starter-mongodb da denedim).

İki farklı MongoDB sunucusuna bağlanmam gerekiyor. Bu yüzden mongo bağlantısı, MongoTemplate vb. Için iki örnek setini yapılandırmam gerekiyor. Ayrıca otomatik yapılandırmayı da devre dışı bırakmak istiyorum. Birden fazla sunucuya bağlandığım için, tek bir varsayılan MongoTemplate ve GridFsTemplate bean'in otomatik olarak yapılandırılmış olmasına gerek yok.

Benim asıl sınıf şuna benzer:

@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); 
    } 
} 

Benim iki Mongo yapılandırma sınıfları şu şekilde görünür:

@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()); 
    } 
} 

ve

@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()); 
    } 
} 

her şey çalışıyor bu kurulumla. MongoDbFactory1 ve template1 çekirdeklerinden @ Öntanımlı açıklamaları kaldırırsam, uygulama otomatik yapılandırma yapılandırılmamış gibi görünen bir istisna ile başarısız olur. İstisna mesajı aşağıda listelenmiştir: Emin EnableAutoConfiguration veya SpringBootApplication ek not başka sınıfları vardır yapmak dışlama listesi ile EnableAutoConfiguration kullanırken

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

Eğer 'SpringBootApplication' veya' EnableAutoConfiguration' ile açıklamalı başka sınıfları var mı? –

+3

"MongoRepositoriesAutoConfiguration" işlevini de dışlamaya çalışın. –

+0

@AndyWilkinson utanç verici bir şekilde SpringBootApplication ile başka bir ders notu ekledim. Birden fazla giriş noktası vardı - test için ana ve Apache Daemon + jsvc koşucusu üretim içindeydim ve sadece tek bir yere yerleştirmek yerine tüm ek açıklamaları kopyalayıp yapıştırdım ... MongoRepositoriesAutoConfiguration dışlamada gerekli olmadığı ortaya çıktı ... –

cevap

4

gibi, yorumların Andy Wilkinson dikkat çekti.

0

Kullanım durumum biraz farklıydı. Aynı projede 2 farklı veritabanına ihtiyacım vardı. Otomatik yapılandırma sınıflarını genişlettim ve bir profil ek açıklaması ekledim.

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

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

Ve

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

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

}