将yaml列表作为jvm参数插入吗?

时间:2019-05-15 12:50:03

标签: java kubernetes yaml micronaut

尝试使用Micronaut框架提供的IP模式过滤器。我想要的是在应用程序启动时注入配置。现在,yaml文件将IP列表作为输入。但是要在运行时注入配置,如何将IP列表传递给此yaml属性。

当前情况

micronaut:
  security:
    enabled: true
    ip-patterns:
      - 127.0.0.1
      - 192.168.1.*

不确定下面的事情是否可以解决

预期

micronaut:
  security:
    enabled: true
    ip-patterns:${list_of_Ip's}

1 个答案:

答案 0 :(得分:0)

ip-patterns是一个列表,您不能将${}表示为列表。您可以创建一个自定义属性源,以将环境变量转换为配置。

例如:

public class Application {

    public static void main(String[] args) {
        String patternsEnv = System.getenv("SOME_ENV");
        List<String> ipPatterns = Arrays.stream(patternsEnv.split(","))
                .map(StringUtils::trimToNull)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        Map<String, Object> map = new HashMap<>(1);
        map.put("micronaut.security.ip-patterns", ipPatterns);
        PropertySource propertySource = new MapPropertySource("ip-patterns", map) {

            @Override
            public int getOrder() {
                return 0;
            }
        };

        Micronaut.build(null)
                .mainClass(Application.class)
                .propertySources(propertySource)
                .start();
    }
}