代码之家  ›  专栏  ›  技术社区  ›  Stéphane GRILLON

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

  •  0
  • Stéphane GRILLON  · 技术社区  · 7 年前

    蒙哥比0.13

    fongo 2.2.0-RC3-快照

    mongodb驱动程序3.8.2

    运行应用程序时,出现以下错误:

    org.springframework.beans.factory.BeanCreationException:创建名为“mongobestandalone”的bean时出错,该bean在类路径资源[com/myproject/company/configuration/MongoConfiguration.class]中定义:调用init方法失败;嵌套的异常是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;

    我的班级:

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

    编辑

    我的测试配置:

    @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());
        }
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Boris    7 年前

    您应该使用Spring数据Mongo,它将创建和注入 com.mongodb.MongoClient 豆子。所以移除 mongoClient() 方法并添加Mongodb Spring数据依赖项:

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

    弹簧靴还提供 MongoTemplate bean并自动配置它。你应该使用 Embedded Mongo 具有 @DataMongoTest 注释,因为它配置 . 看到了吗 here

    推荐文章