有没有办法让某个属性不为空,只有当某个配置文件处于活动状态时才会生效?
@Data
@Component
@ConfigurationProperties(prefix = "sample")
@Validated
public class SampleProperties {
@NotNull
private String sample1;
@NotNull
@Valid
private MoreProperties more = new MoreProperties()
@Data
public static class MoreProperties {
@NotNull // ← This should not be null only if the prod profile is active
private String sample2;
}
}
答案 0 :(得分:1)
如何使用两个@ConfigurationProperties
类。
像这样:
@Validated
@ConfigurationProperties(prefix = "sample")
public class SampleProperties {
@NotNull
private String sample1;
// Getters + Setters
}
就像这样
@Validated
@ConfigurationProperties(prefix = "sample")
public class SamplePropertiesForProfile extends SampleProperties {
@NotNull // ← This should not be null only if the prod profile is active
private String sample2;
// Getters + Setters
}
只有在正确的配置文件处于活动状态时才使用这些类作为bean。
@EnableConfigurationProperties
将@ConfigurationProperties
类作为bean提供。
我比@Component
类的@ConfigurationProperties
注释更喜欢这个,因为它保证只在需要时才创建bean。
我认为@ConfigurationProperties
是一个“愚蠢的人”。容器的属性,不知道它们的用法,因此它不知道何时需要,何时不知道。
@Configuration
@Profile("!yourDesiredProfile")
@EnableConfigurationProperties(SampleProperties.class)
public class SampleNotProfileConfiguration {
private readonly SampleProperties sampleProperties;
@Autowired
public SampleNotProfileConfiguration(SampleProperties sampleProperties){
this.sampleProperties = sampleProperties;
}
// Configure your beans with the properties required for this profile
}
@Configuration
@Profile("yourDesiredProfile")
@EnableConfigurationProperties(SamplePropertiesForProfile .class)
public class SampleProfileConfiguration {
private readonly SamplePropertiesForProfile samplePropertiesForProfile ;
@Autowired
public SampleProfileConfiguration (SamplePropertiesForProfile samplePropertiesForProfile ){
this.samplePropertiesForProfile = samplePropertiesForProfile ;
}
// Configure your beans with the properties required for this profile
}
执行此操作,您可以为具有显式配置属性的每个配置文件进行显式配置。
即使名称@ConfigurationProperties
已经声明此类包含properties
的{{1}}。这些属性应符合configuration
类的要求。
因此,如果应该以不同的方式为给定的配置文件配置bean,则应该是另一个@Configuration
,然后需要另一个显式的@Configuration
。
目前无法验证此解决方案,但由于我对@ConfigurationProperties
的理解,这应该起作用,看起来比混合不同配置文件的属性更加干净。