【问题标题】:Inject system environment variable into Spring Annotation with placeholder使用占位符将系统环境变量注入 Spring Annotation
【发布时间】:2020-12-14 02:46:28
【问题描述】:

我知道你可以像这样使用@Value 注解注入环境变量

    @Value("#{systemEnvironment['AWS_ENV']}")
    private String envTarget;

如果我使用的是 Spring 注释,我可以将环境变量内联注入字符串值吗?例如这样的:

@PropertySource("classpath:secrets-${#{systemEnvironment['AWS_ENV']}.properties")

显然上述方法不起作用,因为它试图将 systemEnvironment['AWS_ENV'] 解析为 jvm 属性。有人有什么想法吗?

【问题讨论】:

标签: java spring


【解决方案1】:

占位符可以移动到单个 aws.properties 文件中:

aws.properties 
envTarget = ${AWS_ENV}

然后:

@PropertySource("classpath:aws.properties")

对于本地开发,占位符可以作为 JVM 参数添加到运行配置中,但这可能会变得难以管理。另一种方法是使用 aws-local.properties(位于同一资源文件夹中),但此文件位于 .gitignore 中,因此永远不会提交机密。然后有一个JVM参数使用本地的profile

【讨论】:

    【解决方案2】:

    虽然接受的答案确实部分解决了我的问题,但我最终只是手动配置属性而不使用 PropertySource 注释。这使我能够更好地控制 bean 生命周期和要加载的属性文件。

    Spring Environment Property Source Configuration

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 2018-06-26
      • 2012-06-05
      • 1970-01-01
      • 2013-12-12
      • 2015-08-20
      • 2015-09-16
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多