如何在spring boot中从系统属性中获取值

roc*_*cky 4 java spring spring-data spring-boot

我正在使用以下命令运行我的 Spring Boot 应用程序

java -Dlibrary.system.property=value -jar myapp.jar
Run Code Online (Sandbox Code Playgroud)

目前,我可以通过以下命令访问它

System.getProperty("library.system.property")
Run Code Online (Sandbox Code Playgroud)

但是我需要通过 Spring 中的任何注释来访问它,例如

@value(${library.system.property})

我试着用

    @Value("${library.system.property")
    private String property;

    @Bean
    public SampleProvider getSampleProvider () {
        return SampleProvider.from(property);
    }
Run Code Online (Sandbox Code Playgroud)

但财产的价值是null。我需要使用条件bean还是什么?

小智 12

您可以使用以下表达式访问系统属性:

@Value("#{systemProperties['library.system.property']}")
private String property
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下表达式访问系统环境:

@Value("#{systemEnvironment['SOME_ENV_VARIABLE']}")
private String property
Run Code Online (Sandbox Code Playgroud)

最后,如果您使用的是 Spring Boot,只要您在命令行中传递它,就可以直接引用属性名称。例如,如果您像这样启动 JAR,则java -jar boot.jar --some.property=value可以将其阅读为:

@Value("${some.property}")
private String property
Run Code Online (Sandbox Code Playgroud)


roc*_*cky 3

谢谢大家。通过更改通过命令行传递参数的方式解决了问题,如下所示

java -jar myapp.jar --library.system.property=value
Run Code Online (Sandbox Code Playgroud)

通过下面的代码片段访问该值

@Value("${library.system.property}")
private String property;

@Bean
public SampleProvider getSampleProvider () {
    return SampleProvider.from(property);
}
Run Code Online (Sandbox Code Playgroud)