java - Mongock 和 @Value 注释似乎不起作用
问题描述
我试图在通过 SpringBootMongockBuilder 创建 SpringBootMongock 对象时使用 @Value 注释来获取 URI 和数据库名称,并且在 mvn install 期间它尝试加载应用程序上下文并失败,因为我的 Spring Contract 测试无法连接到我的应用程序中的数据库。 .yml 文件。无论如何,我在构建我的应用程序时不想要。我已经通过在我的方法签名中注入 Environment 对象来解决这个问题,但我不明白为什么 @Value 不起作用。我已经用 @Configuration 对类进行了注释,效果很好。
更新:我仍然需要从 yaml 文件中获取 URI 以使用 @Bean 注释创建我的 MongoClient ..
@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 注释的记录,一切都按预期工作。
解决方案
该问题与 Mongock 无关,但我很清楚地看到这是由于每当您收到错误时都没有注入 MongoClient。
正如您提到的,当您提供硬编码的 uri 时它可以工作,我很想说 Spring 没有找到spring.data.mongodb.uri
,但如果我没有错,它会失败,说找不到属性,而不是你得到的错误,因为您没有提供默认值。
无论如何,由于某种原因,它就在那里,每当您运行它并失败时,MongoClient 都不会出于某种原因添加到上下文中。
希望对你有帮助。
推荐阅读
- java - 谷歌云搜索索引器“索引器:java.io.IOException:作业失败!”
- java - SnakeYAML 加载到 Guava MultiMap
- linux - 更新GLEW后,窗口变成了只有黑色
- linux - 如何重新配置 oracle XE 18c
- python - pandas:绘制 DataFrame 时未显示 MultiIndex
- php - Wordpress 让用户网站 url 出现在 div 中
- sql - 使用主键更新表字段
- python-3.x - 如何关闭用 Popen 打开的子进程?
- python - 如何从两个矩阵数据框中提取值
- python - 使用 Falcon 框架调用获取请求时遇到问题