Spring Boot 1应用程序中是否可以了解Spring Boot应用程序使用的有效属性与使用YAML设置的所有属性,系统属性...
理想情况下,如果我们在框架中维护任何过时的属性,我想在ApplicationListener类中检测到该情况并阻止应用程序启动。
提前感谢您
埃里克
答案 0 :(得分:2)
当我有相同的要求时,我所做的就是创建自己的PropertyPlaceholderConfigurer:
public class DisplayablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private static final Logger log = LoggerFactory.getLogger(DisplayablePropertyPlaceholderConfigurer.class);
private int processedNum;
private HashSet<String> propertyNames = new HashSet<>();
@Override
protected void doProcessProperties(ConfigurableListableBeanFactory beanFactoryToProcess, StringValueResolver valueResolver) {
super.doProcessProperties(beanFactoryToProcess, valueResolver);
}
@Override
protected String resolvePlaceholder(String placeholder, Properties props, int systemPropertiesMode) {
return super.resolvePlaceholder(placeholder, props, systemPropertiesMode);
}
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
propertyNames.add(placeholder);
return super.resolvePlaceholder(placeholder, props);
}
@Override
protected String resolveSystemProperty(String key) {
return super.resolveSystemProperty(key);
}
public HashSet<String> getPropertyNames() {
return propertyNames;
}
}
然后您可以注册一些CommandLineListener或ApplicationEvent侦听器,以在应用程序启动时调用getPropertyNames()。
之后,您将获得已使用属性的列表。这是一个很好的起点,不是吗?您可以对两个列表进行排序,然后进行比较以过滤掉未使用的属性。