小编Zev*_*esh的帖子

使用 Spring 从环境变量获取地图属性

我正在使用 Spring Boot 创建一个微服务,它使用一些同时加载@Value和 的属性@ConfigurationProperties。这些属性将具有定义的默认值,application.yaml但我想用环境变量覆盖它们。我已经设法对几乎所有基本属性类型做到这一点,但我无法使用地图。

这是检索属性的代码,因此可以在以下位置找到地图configuration.map

@Data
@ConfigurationProperties(prefix = "configuration")
public class MapConfig{
    private Map<String, Object> map;
}
Run Code Online (Sandbox Code Playgroud)

我的默认值是application.yaml

configuration:
  map:
    a: "A"
    b: 2
    c: true
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到一个包含这些键值条目的映射。当我尝试使用环境变量初始化地图时出现问题。我尝试过多种变体CONFIGURATION_MAP='{aa:"aa", bb:12, cc:true}',每次启动应用程序时,我都会得到其中定义的默认值,application.yaml但没有环境映射的痕迹。

我还尝试添加变量,例如CONFIGURATION_MAP_AA='HELLO',我能够在地图中添加新值。然而,我所能做的就是添加信息,但我在 yaml 中编写的默认值仍然存在。在这种情况下我得到:

{
    "aa": "HELLO",
    "a": "A",
    "b": 2,
    "c": true
}
Run Code Online (Sandbox Code Playgroud)

这不是我正在寻找的行为。我想完全覆盖默认地图而不是添加新信息。它还存在这样的问题:以这种方式添加的键总是转换为小写,因此我无法使用驼峰命名法覆盖键。即使我的地图是<String,Object>.

谁能告诉我如何使用环境变量正确初始化地图或为我指明正确的方向?多谢!

java spring environment-variables

5
推荐指数
1
解决办法
7713
查看次数

标签 统计

environment-variables ×1

java ×1

spring ×1