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