当前位置: 首页 > 知识库问答 >
问题:

是否可以使用具有Spring Boot配置属性的YAML序列?

乌灿
2023-03-14

我要求Spring Boot应用程序加载一些理想地适合某种迷你电子表格的配置。几乎所有配置都由绑定到@ConfigurationPropertiesPOJO的YAML属性文件组成,因此:

static class Entry {
    private final Terrain terrain;    // A simple enumeration
    private final int value;
    // ... other fields

    public Entry(Terrain terrain, int value, ...) { ... }
}

@ConfigurationProperties("section")
@ConstructorBinding
@Validated
class SectionProperties {
    private final List<Entry> entries;

    public SectionProperties(List<Entry> entries) {
        this.entries=  List.copyOf(entries);
    }

    // ... other fields, getters, etc
}

如果YAML被构造为这样的对象序列,则这可以很好地工作:

section:
  entries:
    - terrain: plains
      value: 1
    - terrain: forest
      value: 2

然而,从这个配置的html" target="_blank">用户/作者的角度来看,如果数据被组织成一个“电子表格”,那就太好了,因为他们将能够在彼此的上下文中看到各种值,而不是上面的大列表(大约有十几个条目)。类似这样的东西:

section:
  entries:
    - [plains, 1]
    - [forest, 2]

这是有效的YAML(据我所知),但配置绑定失败,列表中的每个条目都出现“未绑定属性”错误,即它似乎将条目识别为YAML序列,但无法将YAML序列块(方括号)内的数据绑定到条目。

是否有人试图这样做或做任何类似的事情?有可能吗?

很抱歉,如果这已经在其他地方解决了,我已经搜索了SO和Spring留档,但找不到任何涵盖这个特定情况以及它是否实际可行的东西。

共有1个答案

束涵涤
2023-03-14

如果您自己实现映射,这应该是可能的:

@Component
@ConfigurationPropertiesBinding
public class EntryConverter implements Converter<List<String>, Entry> {
    @Autowired
    private ConversionService conversionService;

    @Override
    public Entry convert(List<String> from) {
        String[] data = from.split(",");
        return new Entry(data[0],
                conversionService.convert(data[1], Integer.class), ...);
    }
}

我不确定这是否适用于嵌套在列表中的非标量值,我也不确定它是否适用于List

 类似资料:
  • 问题内容: 我有一个App Engine应用程序,我想运行一个查询,该查询根据涉及两个属性的表达式对结果进行排序。到目前为止,我想到的最好的方法是创建一个存储该表达式结果的计算/计算属性。尽管我看到Python中的GAE提供了ComputedProperty,这似乎正是我想要的,但是我找不到Java中的等效项。 如果有帮助,我目前也在使用Objectify。 有任何想法吗? 问题答案: 用@OnS

  • 问题内容: 我一直在使用TwitterBootstrap构建网站,其许多功能都依赖于将内容包装在中,即使它们只是执行Javascript也是如此。我在Bootstrap文档所建议的策略上遇到了问题,因此我试图寻找其他解决方案。 但是后来我尝试完全删除该属性。我一直在使用,并让Javascript处理其余部分。而且有效。 但是有件事告诉我我不应该这样做。对?我的意思是,从技术上讲,它应该是某事的链接

  • 语境 App Engine服务是区域性的。Cloud Datastore虽然具有多区域位置,其中数据在同一位置内的多个区域复制,但尚不清楚当使用其中一个多区域位置时,App Engine service是否也具有多区域可用性。我们理解App Engine在一个区域中使用多个区域来提供高可用性,但需求文档要求设置多区域(主动-主动)App Engine。 使用2个不同的GCP项目在2个不同的地区承载

  • 问题内容: 我有一些生成的CSS,想使用一些CSS可以选择例如 使用和忽略。类似于: 我可以生成更多的类,但想知道CSS是否可行。 问题答案: 您不能使用这样的通配符,但是要获得所需的结果(ID以开头和以结束),可以改用属性starts-with和ends-with选择器,如下所示: 记住,通过链接这样的多个属性选择器(以及类型选择器),您将对所有这些属性选择器进行同一个AND匹配。

  • 我正在尝试使用YamlBeans序列化fxml属性。具体是一个属性。该类有一个私有属性字段和fxml标准getter和setter方法,但序列化发生时信息不会保存到文件中。 入口点: 人物.java YamlSerializer.java 输出文件person.yml:

  • 引入 Maven 依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>${shardingsphere.version}</version> </dependency> <!-- 使用