使用@Value访问Spring Boot Actuator build.version属性

时间:2018-05-05 07:40:00

标签: java spring spring-boot spring-boot-actuator

这应该很容易,但不起作用。 我在Spring Boot(2.0.1-RELEASE)应用程序中激活了spring-boot-actuator。

Actuator-Endpoint /actuator/info按预期工作,并显示正确的版本信息。文件build-info.properties已存在。

尝试访问版本属性时(例如在我的Spring-Controller-Class中):

@Value("${build.version}) private String version;

操作失败,错误为Could not resolve placeholder 'build.version' in value "${build.version}"

任何建议?

3 个答案:

答案 0 :(得分:2)

使用spring表达式语言,它非常简单干净。

@Value("#{buildProperties.get('version')}")           // not 'build.version'
private String myAppBuildVersion;

或者更好,AutowirebuildProperties bean直接添加到您的组件中,以便您可以随意使用它。

@Autowired
private BuildProperties buildProperties;
  

注意:autoconfiguration剥离了build.前缀。所以你的   SpEL表达式应使用version作为关键字。不是build.version

答案 1 :(得分:0)

我需要将文件build-info.properties添加为@PropertSource

@SpringBootApplication()
@PropertySource("classpath:META-INF/build-info.properties")
public class MyApp implements WebMvcConfigurer { 
  [...]
}

答案 2 :(得分:0)

在您的@Service中,将@Value放入构造函数中,作为构造函数的参数。不要使用独立值并尝试引用它。

像这样:

@Service
public class myService {

  public myService(@Value("${my.param}") String myParam) {
   client.withParam(myParam).build();
  }

}

您的application.properties的值如下:

my.param=http://google.com

我尝试了其他实现,但它们不起作用。例如

 @Service
 public class myService {

      @Value("${my.param}")
      String myParam;

      public myService() {
       client.withParam(myParam).build();
      }

  }

不起作用。

在这种情况下,将初始化服务,但字符串将为null。我无法解释。我想这与参数构造和bean初始化时间有关。