Java @spring引导中的值未从application.properties中提供值

Java @spring引导中的值未从application.properties中提供值,java,spring,spring-boot,Java,Spring,Spring Boot,我试图将应用程序属性中的值读入一个用 @Configuration public class testClass { @Value("${com.x.y.z.dummy.name}") private String name; 一旦我在这个类中用@Bean注释的方法上运行代码: @Bean public Helper helper(X x){ System.out.println(this.name); } 这里的输出是-

我试图将应用程序属性中的值读入一个用

@Configuration
public class testClass {

  @Value("${com.x.y.z.dummy.name}")
  private String name;
一旦我在这个类中用@Bean注释的方法上运行代码:

  @Bean
  public Helper helper(X x){
     System.out.println(this.name);
  }
        
这里的输出是->${com.x.y.z.dummy.name},而不是application.properties中的${com.x.y.z.dummy.name}值。我尝试了@Autowired,也尝试了从环境变量读取数据。不知道会发生什么。有人能帮忙吗? 谢谢大家!

添加application.properties:

com.x.y.z.dummy.name=localhost
com.x.y.z.dummy.host=8888

我建议在您的项目中搜索返回
属性资源占位符配置器的Bean。可以将该对象配置为设置不同的前缀,而不是“${”。这样做将导致您描述的行为

例如,创建这个类,我能够重现您的问题

import org.springframework.context.annotation.Bean;
导入org.springframework.context.support.propertysourcesplaceplaceconfigurer;
公共类预激发配置{
@豆子
公共静态属性资源占位符配置器配置(){
属性资源占位符配置器属性资源占位符配置器
=新属性资源占位符配置器();
propertySourcesPlaceholderConfigurer.setPlaceholderPrefix(“%{”);
propertySourcesPlaceholderConfigurer.SetIgnoreUnsolvablePlaceholders(true);
返回属性资源占位符配置器;
}
}

您的Bean可能会有所不同,并且它存在的理由很充分,因此在没有进一步调查的情况下不要盲目删除它。

如果它是Spring引导应用程序,它应该正常工作。如果它是Spring核心应用程序,您应该注册
PropertySourcesPlaceholderConfigurer
作为Bean后处理器(使用静态键)可能重复我已经尝试过这个it力帮助@fatrixienicolieShare您的代码库通过github更快solution@NicoVan Belle谢谢!谢谢@gere,我根本看不到PropertySourcesplaceConfigurer,我在发布一个第三方依赖项的升级后遇到了这个问题。一旦我添加了PropertySourcesPlacehoLlderConfigurer它似乎工作正常然后在第三方库中配置
属性资源占位符配置器
,以改变正常行为。当您自己添加它时,您将再次声明它,并这样做,使它再次正常工作。嘿,为什么->静态属性资源占位符配置er configure()是一个静态方法吗?你能帮我理解吗?因为Spring文档建议这样做:在这里查找“BeanFactoryPostProcessor returning@Bean methods”一段:它解释了原因,并使用了一个返回propertySourcesplaceConfigurer的Bean作为示例。