Я пытаюсь использовать аннотацию @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 все работает как положено.