【问题标题】:Spring property name casing by exampleSpring属性名称大小写示例
【发布时间】:2022-08-16 22:29:43
【问题描述】:

Spring 将自动将application.propertiesapplication.yml 中定义的属性绑定到@ConfigurationProperties 注释类中定义的字段。例如,在我的application.properties 中,我可以拥有:

fizz.buzz=35
fizz.foo=hello

在我的 Java 代码中,我可以拥有:

@ConfigurationProperties(\"fizz\")
public class FizzProperties {
    private Integer buzz;
    private String foo;
    // ...
}

在运行时FizzProperties#buzz 将获得35 的值注入其中,FizzProperties#foo 将获得\"hello\" 的值注入其中。

我想知道骆驼大小写的 Java 字段以及属性文件中使用的连字符 (\"-\") 和句点 (\".\") 的命名约定是什么。例如,如果我有:

fizz.whistle-feather=true
fizz.baz.boo=always

为了让 Spring 正确映射和注入它们,它们对应的 Java 字段需要是什么样的?

public class Baz {
    private String boo;
}

@ConfigurationProperties(\"fizz\")
public class FizzProperties {
    private Integer whistleFeather; // correct?
    private Baz baz; // correct?
    // ...
}

我的假设在这里是正确的还是被误导了(如果被误导了,又如何)?我在 Spring 文档中找不到这个解释。

    标签: java spring


    【解决方案1】:

    如 spring-boot 文档中所述,它使用"relaxed binding",因此这两个属性“哨子羽毛”“哨羽”将映射到您的private Integer whistleFeather,但建议尽可能以小写kebab 格式存储属性,例如fizz.whistle-feather=10

    所以你的第一个案例是正确的。

    第二种情况也是正确的,因为在application.properties 中使用点作为分隔符,而 YAML 文件使用点和冒号作为分隔符。

    您还可以将嵌套属性定义为嵌套类,以将它们存储在一个地方,如下所示:

    @ConfigurationProperties("fizz")
    public class FizzProperties {
        private Integer whistleFeather;
        private Baz baz;
        // getters, setters
        
        public static class Baz {
            private String boo;
            // getters, setters
        }
    }
    

    查看here 以获取有关 spring-boot 属性绑定和示例的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 2019-02-26
      • 2011-11-30
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多