【问题标题】:How to get the value from system property in spring boot如何在spring boot中从系统属性中获取值
【发布时间】:2019-05-21 17:18:50
【问题描述】:

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

java -Dlibrary.system.property=value -jar myapp.jar

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

System.getProperty("library.system.property")

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

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

我尝试使用

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

    @Bean
    public SampleProvider getSampleProvider () {
        return SampleProvider.from(property);
    }

但该属性的值为null。我需要使用条件bean吗?

【问题讨论】:

  • @Value("${library.system.property}") 应该可以工作。
  • Spring Boot 将环境变量、系统属性和命令行参数与注册的配置文件结合起来,并创建它所谓的“环境”。这提供了对上述所有内容的统一访问 - 您的建议应该完美无缺;不是吗?
  • 当我在下面的代码 @Value("${library.system.property}") private String property; @Bean public void test() throws URISyntaxException { return testMethod(property); } 中添加 @Value("${library.system.property}") 时它不起作用
  • 将您的命令更改为:java --library.system.property=value -jar myapp.jar
  • 感谢它在传递参数java -jar myapp.jar --library.system.property=value 并通过@Value("${library.system.property}") 访问它后对我有用

标签: java spring spring-boot spring-data


【解决方案1】:

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

@Value("#{systemProperties['library.system.property']}")
private String property

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

@Value("#{systemEnvironment['SOME_ENV_VARIABLE']}")
private String property

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

@Value("${some.property}")
private String property

【讨论】:

    【解决方案2】:

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

    java -jar myapp.jar --library.system.property=value
    

    通过以下代码 sn-p 访问值

    @Value("${library.system.property}")
    private String property;
    
    @Bean
    public SampleProvider getSampleProvider () {
        return SampleProvider.from(property);
    }
    

    【讨论】:

      【解决方案3】:

      简单使用

      import org.springframework.boot.system.SystemProperties;
      ...
      String propertyKey = "library.system.property";
      String propertyValue = SystemProperties.get(propertyKey);
      

      【讨论】:

        【解决方案4】:

        您可以使用控制器上的@Value 从属性文件中访问您的数据。 例如: @Value("${library.system.property}") 私有字符串属性;

        现在你的价值在于财产,现在你可以在任何地方使用它。

        【讨论】:

          猜你喜欢
          • 2014-12-21
          • 2021-03-23
          • 1970-01-01
          • 2020-02-14
          • 1970-01-01
          • 2017-02-10
          • 2011-06-27
          • 2018-01-25
          • 1970-01-01
          相关资源
          最近更新 更多