字段上的@ConfigurationProperties

时间:2015-12-10 17:17:10

标签: java properties spring-boot

使用@ConfigurationProperties定义属性时,我可以定义特定字段的前缀而不是整个类吗?

例如,假设我们有一个属性类

@ConfigurationProperties(prefix = "com.example")
public class MyProperties {
    private String host;
    private String port;
    // Geters and setters...
}

这会将字段hostport绑定到com.example.hostcom.example.port。我们想说我想将port绑定到com.example.something.port。这样做的方法是定义一个Inner class Something并在那里添加属性port。但如果我需要更多的前缀,它将变得太麻烦。我尝试在设置器上添加@ConfigurationProperties,因为注释的目标是ElementType.TYPEElementType.METHOD

@ConfigurationProperties(prefix = "com.example.something.port")
public void setPort(int port) {...}

但它最终没有奏效。除了通过Inner类之外,还有另一种自定义前缀的方法吗?

1 个答案:

答案 0 :(得分:0)

  1. 如果您想映射单个属性,只需使用@Value注释。

  2. 如果您有群组,例如像这样:

    test1.property1 = ... test1.test2.property2 = ... test1.test2.property3 = ...

  3. 您可以使用

    import javax.validation.constraints.NotNull;
    
    import lombok.Getter;
    import lombok.Setter;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    
    @Getter
    @Setter
    @Configuration
    @EnableConfigurationProperties
    @ConfigurationProperties(locations = "classpath:myapp.properties")
    public class ApplicationProperties {
    
        private String property1;
        private Test2 test2;
    
        @Getter
        @Setter
        @ConfigurationProperties(prefix = "test2")
        public static class Test2 {
            @NotNull
            private String property2;
            @NotNull
            private String property3;
        }
    }