如何从操作系统环境变量中获取Spring配置的数组类型值
Spring Cloud Gateway数组类型配置的环境变量导出方法
Spring Boot的宽松绑定规则支持多种方式将环境变量映射到数组/List类型配置,以下是对应你示例配置的三种实现方案:
方法1:逗号分隔值写法(适合普通值数组,元素无逗号)
对于简单的字符串数组,Spring Boot会自动将逗号分隔的字符串转换为数组,配置方式如下:
# 对应allowedOrigins配置 export SPRING_CLOUD_GATEWAY_GLOBALCORS_CORSCONFIGURATIONS____ALLOWEDORIGINS="https://example1.com/,https://example2.com/"
注意:此方法不适用routes这类对象数组的场景
方法2:下标索引写法(通用所有数组类型)
按照数组下标从0开始依次定义每个元素的属性,普通值数组和对象数组都支持:
# 1. allowedOrigins数组配置 export SPRING_CLOUD_GATEWAY_GLOBALCORS_CORSCONFIGURATIONS____ALLOWEDORIGINS_0="https://example1.com/" export SPRING_CLOUD_GATEWAY_GLOBALCORS_CORSCONFIGURATIONS____ALLOWEDORIGINS_1="https://example2.com/" # 2. routes对象数组配置 export SPRING_CLOUD_GATEWAY_ROUTES_0_ID="ex1" export SPRING_CLOUD_GATEWAY_ROUTES_0_URI="http://ex1.com/" export SPRING_CLOUD_GATEWAY_ROUTES_1_ID="ex2" export SPRING_CLOUD_GATEWAY_ROUTES_1_URI="http://ex2.com/"
说明:配置中的[/**]属于Map的特殊键,环境变量中直接将所有非字母数字字符替换为下划线即可被正常识别
方法3:SPRING_APPLICATION_JSON注入(适合复杂配置场景)
如果配置结构复杂、特殊符号多,可以直接将配置整合成JSON字符串赋值给SPRING_APPLICATION_JSON环境变量,不需要调整任何配置结构:
export SPRING_APPLICATION_JSON='{ "spring": { "cloud": { "gateway": { "globalcors": { "corsConfigurations": { "/**": { "allowedOrigins": ["https://example1.com/", "https://example2.com/"] } } }, "routes": [ {"id": "ex1", "uri": "http://ex1.com/"}, {"id": "ex2", "uri": "http://ex2.com/"} ] } } } }'
此方法完全规避了环境变量特殊字符的问题,配置结构和原YAML完全一致,出错概率更低。
补充说明
- Windows CMD环境下将
export替换为set使用,PowerShell环境使用$env:变量名 = "值"的格式赋值。 - 如果数组元素本身包含逗号,禁止使用方法1,必须选择方法2或方法3实现。
内容的提问来源于stack exchange,提问作者JIN
相关产品推荐
相关产品推荐

