Spring Boot 2.x 列表绑定问题
Posted
技术标签:
【中文标题】Spring Boot 2.x 列表绑定问题【英文标题】:Spring Boot 2.x list binding issues 【发布时间】:2018-11-18 20:52:54 【问题描述】:升级到 Spring Boot 2x 后,我遇到了绑定某些列表的问题。该代码在 Spring 1.x 中工作,现在它在启动时引发绑定错误。这是我的 application.yml...
aws:
geo-mappings:
- name: USA
regions:
- us-west-2
- us-west-1
- us-east-1
- us-east-2
- name: California
regions:
- us-west-2
这是我的组件类...
package com.example.demo.config.aws;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* Created by goer on 4/18/17.
*/
@Component
@Scope("singleton")
@ConfigurationProperties(prefix="aws")
public class AWSConfigProvider
private List<GeoMappingEntry> geoMappings = new ArrayList<>();
public List<GeoMappingEntry> getGeoMappings()
return this.geoMappings;
这是嵌套对象...
package com.example.demo.config.aws;
import java.util.ArrayList;
import java.util.List;
public class GeoMappingEntry
private String name;
private List<String> regions = new ArrayList<>();
public GeoMappingEntry(String name, List<String> regions)
this.name = name;
this.regions = regions;
当我尝试跑步时,我得到...
应用程序启动失败
说明:
无法将“aws.geo-mappings”下的属性绑定到 java.util.List:
Reason: Failed to bind properties under 'aws.geo-mappings' to java.util.List<com.example.demo.config.aws.GeoMappingEntry>
行动:
更新应用程序的配置
还有其他人遇到过同样的问题吗?解决方案?有什么建议吗?
【问题讨论】:
我想说你的name
字段需要一个setter。已初始化的集合不需要 setter,但未初始化的字段可能需要一个。
可能是2.0.1中修复的错误
我希望。我使用最新版本 2.0.2 创建了一个简化项目,但它无法正常工作。我怀疑新的绑定实现对某些东西有更严格的限制并造成了问题。
【参考方案1】:
以防万一其他人正在研究类似的问题。事实证明,一些在以前版本的 Spring 中不起作用的环境变量现在能够实际创建绑定,这就是错误的来源。
在这种情况下,从环境变量到 AWS_GEOMAPPINGS_0_REGIONS_0 = us-west-2
等列表的宽松绑定以前不起作用,但现在可以了。在 Spring Boot 2.0 之前,从环境变量中设置它的唯一方法是通过 SPRING_APPLICATION_JSON
传递 JSON,这有效,但如果您尝试使用封装它的其他 JSON(如 Terraform)进行部署,则会变得复杂。
【讨论】:
你能提供更多细节吗?例如,让未来的读者知道您正在谈论的环境变量是哪些环境变量......只是说出来。以上是关于Spring Boot 2.x 列表绑定问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.x基础教程:使用@Scheduled实现定时任务
Java微信公众平台开发之生成带参二维码(Spring Boot 2.X)
Spring Boot 2.X 装载 yaml 配置文件的键值对