如何在spring-boot中禁用spring-data-mongodb自动配置

有没有人尝试在Spring Boot时禁用mongodb的自动配置?

我正在尝试使用spring-data-mongodb进行spring-boot; 使用基于Java的配置;使用spring-boot

1.2.1.RELEASE,我导入spring-boot-starter-web及其父pom进行依赖项管理。我还导入了spring-data-

mongodb(也尝试过spring-boot-starter-mongodb)。

我需要连接到两个不同的MongoDB服务器。因此,我需要为mongo连接,MongoTemplate等配置两组实例。

我的主班看起来像这样:

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

}

}

我的两个mongo配置类如下所示:

@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和template1

bean中删除@Primary批注,则应用程序将失败,并出现一个似乎尚未禁用自动配置的异常。下面列出了异常消息:

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

回答:

正如安迪·威尔金森(Andy Wilkinson)在评论中指出的那样,在将EnableAutoConfiguration与exclude

list一起使用时,请确保没有其他使用EnableAutoConfiguration或SpringBootApplication注释的类。

以上是 如何在spring-boot中禁用spring-data-mongodb自动配置 的全部内容, 来源链接: utcz.com/qa/430730.html

回到顶部