Java Spring引导使用CLI arg覆盖应用程序属性
我有Java Spring引导使用CLI arg覆盖应用程序属性,java,spring,spring-boot,Java,Spring,Spring Boot,我有application.properties变量用于设置默认值: openvasmd.socket=/usr/local/var/run/openvasmd.sock 我希望能够在应用程序运行时更改它,如下所示: java -jar -Dopenvasmd.socket=/var/run/openvasmd.sock application.jar 但是,当我想使用它的值时,请使用: @Value("${openvasmd.socket}") private String socket;
application.properties
变量用于设置默认值:
openvasmd.socket=/usr/local/var/run/openvasmd.sock
我希望能够在应用程序运行时更改它,如下所示:
java -jar -Dopenvasmd.socket=/var/run/openvasmd.sock application.jar
但是,当我想使用它的值时,请使用:
@Value("${openvasmd.socket}")
private String socket;
public String test() {
return "gvm-cli --socketpath "+socket;
}
结果是:
gvm cli null
谁能告诉我哪里出了错吗?来自
来自命令行参数的属性
与使用文件不同,属性可以直接在命令行上传递:
您还可以通过系统属性来实现这一点,这些属性在-jar命令之前而不是之后提供:
您正在使用的
@Value
类是否标记为Springbean?它标记为@Component,但您是通过使用@Autowired
(正确)获得该类的实例,还是使用new
(错误!)?您的意思是结果是gvm cli--socketpath null
?看来不管怎样,你都应该得到--socketpath
部分。我认为这更像是@Andreas所想的问题。如果问题是没有正确指定对属性的覆盖,那么您应该从application.properties
获取值,而不是null
-使用new
创建包含此值的对象实例似乎是最有可能的解释。另一种解释是,如果该属性在其他地方被显式设置为null
。但如果这是“答案”,那么他在进行此修复之前获得的不是默认值,而不是null
?确实,您提出的问题对我很有意义。我将保留我的答案,尽管如此,我认为它仍然为讨论增添了一些见解。
java -jar app.jar --property="value"
java -Dproperty.name="value" -jar app.jar