这应该很简单,但不起作用。我在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}"
。
有什么建议?
使用spring表达式语言,它非常简单和干净。
@Value("#{buildProperties.get('version')}") // not 'build.version'
private String myAppBuildVersion;
或者更好的是,Autowire
将buildProperties
bean直接添加到您的组件中,以便您可以随意使用它。
@Autowired
private BuildProperties buildProperties;
注意:
autoconfiguration
剥离了build.
前缀。所以你的SpEL
表达式应该使用version
作为关键。不是build.version
。
我需要将文件build-info.properties
添加为@PropertSource
@SpringBootApplication()
@PropertySource("classpath:META-INF/build-info.properties")
public class MyApp implements WebMvcConfigurer {
[...]
}
在@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。我无法解释。我想,与param构造和bean初始化时间有关。