简体   繁体   English

在springboot应用程序上创建mongobee bean时出错(运行测试时)

[英]Error creating mongobee bean on springboot app (on run of tests)

I use all lasts versions (fix others problems) 我使用所有最新版本(修复其他问题)

mongobee 0.13 蒙古0.13

fongo 2.2.0-RC3-SNAPSHOT fongo 2.2.0-RC3-SNAPSHOT

mongodb-driver 3.8.2 mongodb驱动程序3.8.2

When I run my app, I have this error: 当我运行我的应用程序时,出现以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongobeeStandalone' defined in class path resource [com/myproject/company/configuration/MongoConfiguration.class]: Invocation of init method failed; org.springframework.beans.factory.BeanCreationException:在类路径资源[com / myproject / company / configuration / MongoConfiguration.class]中创建名称为'mongobeeStandalone'的bean时出错:调用init方法失败; nested exception is java.lang.AbstractMethodError: com.mongodb.client.internal.FongoOperationExecutor.execute(Lcom/mongodb/operation/ReadOperation;Lcom/mongodb/ReadPreference;Lcom/mongodb/ReadConcern;)Ljava/lang/Object; 嵌套异常为java.lang.AbstractMethodError:com.mongodb.client.internal.FongoOperationExecutor.execute(Lcom / mongodb / operation / ReadOperation; Lcom / mongodb / ReadPreference; Lcom / mongodb / ReadConcern;)Ljava / lang / Object; ... Caused by: java.lang.AbstractMethodError: com.mongodb.client.internal.FongoOperationExecutor.execute(Lcom/mongodb/operation/ReadOperation;Lcom/mongodb/ReadPreference;Lcom/mongodb/ReadConcern;)Ljava/lang/Object; ...由...引起:java.lang.AbstractMethodError:com.mongodb.client.internal.FongoOperationExecutor.execute(Lcom / mongodb / operation / ReadOperation; Lcom / mongodb / ReadPreference; Lcom / mongodb / ReadConcern;)Ljava / lang / Object ;

My class: 我的课:

@Bean
public Mongobee mongobeeStandalone(final MongoTemplate mongoTemplate, final MongoClient mongoClient) {
    final Mongobee runner = new Mongobee(mongoClient);
    runner.setChangeLogsScanPackage(Changelog1.class.getPackage().getName()); // package to scan for changesets
    runner.setDbName(mongoTemplate.getDb().getName());
    return runner;
}

@Bean
public MongoClient mongoClient(final MongoDbFactory mongoDbFactory) {
    final Mongo mongo = mongoDbFactory.getLegacyDb().getMongo();
    if (!MongoClient.class.isInstance(mongo)) {
        throw new UnsupportedOperationException("Must be a MongoClient");
    }
    return MongoClient.class.cast(mongo);
}

EDIT 编辑

My test configuration: 我的测试配置:

@Configuration
public class FoncgoConfiguration extends AbstractMongoConfiguration {

    @Bean
    public Fongo fongo() {
        return new Fongo("mongo-test");
    }

    @Override
    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        final SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(mongoClient(), getDatabaseName());
        final MongoTemplate mongoTemplate = new MongoTemplate(simpleMongoDbFactory, mappingMongoConverter());
        return mongoTemplate;
    }

    @Override
    @Bean
    public MongoClient mongoClient() {
        return MockMongoClient.create(fongo());
    }

}

You should use Spring Data Mongo, it will create and inject com.mongodb.MongoClient bean. 您应该使用Spring Data Mongo,它将创建并注入com.mongodb.MongoClient bean。 So remove mongoClient() method and add the Mongodb Spring Data dependency: 因此,删除mongoClient()方法并添加Mongodb Spring Data依赖项:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

Spring Boot also provides a MongoTemplate bean and auto-configures it. Spring Boot还提供了MongoTemplate bean并对其进行自动配置。 For testing you should use Embedded Mongo with @DataMongoTest annotation, because it configures a MongoTemplate . 为了进行测试,您应该使用带有@DataMongoTest批注的Embedded Mongo ,因为它配置了MongoTemplate See here for test examples. 有关测试示例,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 class 路径资源 Mongobee 中定义名称为“mongoTemplate”的 bean 创建错误 - Error creating bean with name 'mongoTemplate' defined in class path resource Mongobee 使用 elasticSearch 和 SpringBoot 创建 bean 时出错 - Error creating bean with elasticSearch and SpringBoot 创建名为“configDataContextRefresher”的 bean 时出错 [SpringBoot] - Error creating bean with name 'configDataContextRefresher' [SpringBoot] 创建名为“requestMappingHandlerMapping”的 bean 时出错 - SpringBoot - Error creating bean with name 'requestMappingHandlerMapping' - SpringBoot Tomcat上的SpringBoot:创建名称为“ jacksonObjectMapperBuilder”的bean时出错 - SpringBoot on Tomcat: Error creating bean with name 'jacksonObjectMapperBuilder' SpringBoot MAVEN 和 MongoDB - 使用名称创建 bean 时出错 - SpringBoot MAVEN and MongoDB -Error creating bean with name SpringBoot 测试 - 创建名为“entityManagerFactory”的 bean 时出错 - SpringBoot Test - Error creating bean with name 'entityManagerFactory' 初始化 springboot 创建名为“flywayInitializer”的 bean 时出错 - Error on initialize springboot creating bean with name 'flywayInitializer' 创建名称为&#39;entityManagerFactory的bean时出错,无法正确运行App - Error creating bean with name 'entityManagerFactory, can not run App properly SpringBoot JPA Hibernate:创建名称为&#39;entityManagerFactory&#39;的bean时出错 - SpringBoot JPA Hibernate: Error creating bean with name 'entityManagerFactory'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM