我们经常要使用@ConfigurationProperties来注入自定义配置,但是当配置规则复杂的情况下有时需要定义多个类来映射配置,此时就遇到一个问题,是将这些类单独定义还是以内部类的方式来定义。
我选择使用内部类,理由是:方便管理和维护。
在使用内部类的方式时遇到了一个问题,配置无法注入,于是在网上各种查找,结果无功而返。后来想起来Datasource的配置就是一个相对复杂的配置,于是去看它是怎么实现的,后来发现采用这种方式定义时需要将内部类定义为public static的。
@Data
@Component
@ConfigurationProperties(prefix = "data.collector")
public class CollectorConfiguration {
private Ignored ignored;
@Data
public static class Ignored {
private int maxSize;
private List<String> types = new ArrayList<>();
private Map<String,Table> tables = new HashMap<>();
@Data
public static class Table {
private List<String> types = new ArrayList<>();
private List<String> names = new ArrayList<>();
}
}
}