使用@ConfigurationProperties
定义属性时,我可以定义特定字段的前缀而不是整个类吗?
例如,假设我们有一个属性类
@ConfigurationProperties(prefix = "com.example")
public class MyProperties {
private String host;
private String port;
// Geters and setters...
}
这会将字段host
和port
绑定到com.example.host
和com.example.port
。我们想说我想将port
绑定到com.example.something.port
。这样做的方法是定义一个Inner class Something
并在那里添加属性port
。但如果我需要更多的前缀,它将变得太麻烦。我尝试在设置器上添加@ConfigurationProperties
,因为注释的目标是ElementType.TYPE
和ElementType.METHOD
:
@ConfigurationProperties(prefix = "com.example.something.port")
public void setPort(int port) {...}
但它最终没有奏效。除了通过Inner类之外,还有另一种自定义前缀的方法吗?
答案 0 :(得分:0)
如果您想映射单个属性,只需使用@Value
注释。
如果您有群组,例如像这样:
test1.property1 = ... test1.test2.property2 = ... test1.test2.property3 = ...
您可以使用
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;
}
}