Ошибка создания bean-компонента mongobee в приложении springboot (при запуске тестов) - PullRequest
0 голосов
/ 18 октября 2018

Я использую все последние версии (исправляйте другие проблемы)

mongobee 0.13

fongo 2.2.0-RC3-SNAPSHOT

mongodb-driver 3.8.2

Когда я запускаю свое приложение, у меня появляется эта ошибка:

org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'mongobeeStandalone', определенного в ресурсе пути к классу [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 /;... Вызывается: 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 Ответ

0 голосов
/ 18 октября 2018

Вам следует использовать Spring Data Mongo, он создаст и внедрит компонент com.mongodb.MongoClient.Поэтому удалите метод mongoClient() и добавьте зависимость Mongodb Spring Data:

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

Spring Boot также предоставляет компонент MongoTemplate и автоматически его конфигурирует.Для тестирования вы должны использовать Embedded Mongo с аннотацией @ DataMongoTest , поскольку он настраивает MongoTemplate.См. здесь для тестовых примеров.

...