Mongock и аннотация @Value не работают - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь использовать аннотацию @Value, чтобы получить URI и имя базы данных при создании объекта SpringBootMongock через SpringBootMongockBuilder, и во время установки mvn он пытается загрузить контекст приложения и завершается неудачно, поскольку мои тесты Spring Contract не могут подключиться к базе данных в мой файл application.yml. Что я не хочу при создании моего приложения в любом случае. Я справился с этим, вставив объект Environment в сигнатуру моего метода, но я не понимаю, почему @Value не работает. Я аннотировал класс с @Configuration, который работает отлично.

Обновление: мне все еще нужно извлечь URI из файла yaml для создания моего MongoClient с использованием аннотации @Bean ..

    @Configuration
    public class MongockConfiguration {

    @Value(${spring.data.mongodb.uri})
    private String uri;

   @Bean
   public MongoClient mongoClient(){
      return MongoClients.create(uri);
   }

   @Bean
   public SpringBootMongock mongock(Application context, Environment environment)   throws Exception {

   return new SpringBootMongockBuilder(mongoClient(), dbname, ChangeLogOne.class.getPackage().getName()).setEnabled(migrate).setApplicationContext(applicationContext).build();
}

некоторые из приведенных выше значений, которые я извлекаю из объекта Environment поскольку @Value не работал для меня ... нет необходимости указывать точные значения здесь

исключение составляет

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongock' defined in class path resource [blah/dht/mcs/registrationservice/config/MongockConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.cloudyrock.mongock.SpringBootMongock]: Factory method 'mongock' threw exception; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='testUser', source='admin', password=<hidden>, mechanismProperties={}}
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.cloudyrock.mongock.SpringBootMongock]: Factory method 'mongock' threw exception; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='testUser', source='admin', password=<hidden>, mechanismProperties={}}
Caused by: com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='testUser', source='admin', password=<hidden>, mechanismProperties={}}
Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }

и для записи со значениями, жестко закодированными с использованием аннотации @Value все работает как положено.

1 Ответ

0 голосов
/ 09 апреля 2020

Эта проблема не связана с Mongock, но я вижу довольно ясно, что это связано с тем, что MongoClient не вводится всякий раз, когда вы получаете сообщение об ошибке. соблазн сказать, что Spring не находит spring.data.mongodb.uri, но если я не ошибаюсь, он не сможет сказать, что свойство не найдено, а не ошибка, которую вы получаете, поскольку вы не предоставляете значение по умолчанию.

В любом случае, это что-то там, по какой-то причине, всякий раз, когда вы запускаете это и терпите неудачу, MongoClient по какой-то причине не добавляется в контекст.

Надеюсь, вы найдете это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...