Java Mongock和@Value注释似乎不起作用

Java Mongock和@Value注释似乎不起作用,java,spring-boot,spring-data,Java,Spring Boot,Spring Data,在通过SpringBootMongockBuilder创建SpringBootMongock对象时,我尝试使用@Value注释获取URI和数据库名称,在mvn安装期间,它尝试加载应用程序上下文,但失败了,因为我的Spring契约测试无法连接到application.yml文件中的数据库。无论如何,在构建我的应用程序时,我都不希望看到这种情况。 我通过在方法签名中注入环境对象来解决这个问题,但我不明白@Value为什么不起作用。我已经用@Configuration注释了这个类,效果很好 更新:我仍

在通过SpringBootMongockBuilder创建SpringBootMongock对象时,我尝试使用@Value注释获取URI和数据库名称,在mvn安装期间,它尝试加载应用程序上下文,但失败了,因为我的Spring契约测试无法连接到application.yml文件中的数据库。无论如何,在构建我的应用程序时,我都不希望看到这种情况。 我通过在方法签名中注入环境对象来解决这个问题,但我不明白@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();
}
上面的一些值是我从环境对象中提取的,因为@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" }
java.lang.IllegalStateException:无法加载ApplicationContext
原因:org.springframework.beans.factory.BeanCreationException:创建名为“mongock”的bean时出错,该bean在类路径资源[blah/dht/mcs/registrationservice/config/MongockConfiguration.class]:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beanstantiationException:未能实例化[com.github.cloudyrock.mongock.SpringBootMongock]:工厂方法“mongock”引发异常;嵌套异常是com.mongodb.MongoSecurityException:验证MongoCredential{mechanism=SCRAM-SHA-1、userName='testUser',source='admin',password=,mechanismProperties={}的异常
原因:org.springframework.beans.beanstanitiationException:未能实例化[com.github.cloudyrock.mongock.SpringBootMongock]:工厂方法“mongock”引发异常;嵌套异常是com.mongodb.MongoSecurityException:验证MongoCredential{mechanism=SCRAM-SHA-1、userName='testUser',source='admin',password=,mechanismProperties={}的异常
导致原因:com.mongodb.MongoSecurityException:MongoCredential{mechanism=SCRAM-SHA-1,userName='testUser',source='admin',password=,mechanismProperties={}验证异常
原因:com.mongodb.MongoCommandException:命令失败,错误为18(AuthenticationFailed):“身份验证失败”。服务器本地主机:27017。完整响应为{“ok”:0.0,“errmsg”:“身份验证失败”,“code”:18,“codeName”:“AuthenticationFailed”}

对于带有硬编码值的记录和使用@Value注释的记录,一切都按预期工作

这个问题与Mongock无关,但我很清楚这是因为每当出现错误时,MongoClient都没有被注入

正如您提到的,当您提供硬编码的uri时,它是有效的,我想说Spring找不到
Spring.data.mongodb.uri
,但是如果我没有错的话,它会说找不到属性,而不是您得到的错误,因为您没有提供默认值

无论如何,出于某种原因,当您运行它并且失败时,出于某种原因,MongoClient不会添加到上下文中


我希望您会发现它很有用。

这个问题与Mongock无关,但我很清楚这是因为每当出现错误时,MongoClient都没有被注入

正如您提到的,当您提供硬编码的uri时,它是有效的,我想说Spring找不到
Spring.data.mongodb.uri
,但是如果我没有错的话,它会说找不到属性,而不是您得到的错误,因为您没有提供默认值

无论如何,出于某种原因,当您运行它并且失败时,出于某种原因,MongoClient不会添加到上下文中


我希望您觉得它很有用。

您能分享您正在使用的代码和您正在接收的错误堆栈跟踪以进行进一步分析吗?您能分享您正在使用的代码和您正在接收的错误堆栈跟踪以进行进一步分析吗?我的问题是我没有对我的SpringBootTest中的MongockConfiguration.class,它正在测试我们的spring契约。再次感谢您的帮助。我的问题是,在测试spring契约的SpringBootTest中,我没有执行MongockConfiguration.class的类级MockBean。再次感谢您的帮助。