12.02 SpringBoot2.2版本配置綁定是不是有點坑了?




SpringBoot版本升級兼容性一直做的不是多麼的美麗,各個大分支之間由於底層使用的Srping版本不同,才導致的這種問題出現,而升級到2.2.1.RELEASE版本之後又遇到一個配置綁定的坑。

SpringBoot2.2版本配置綁定是不是有點坑了?

問題描述

SpringBoot在升級到2.2.1.RELEASE版本後遇到了屬性配置綁定的問題,我去找到SpringBoot版本發佈的頁面(Spring-Boot-2.2-Release-Notes)才瞭解到從2.2.1.RELEASE版本開始@SpringBootApplication註解已經不再添加@ConfigurationPropertiesScan支持,需要手動進行配置,這一點我們從源碼上可以更清楚的看到。

2.2.0.RELEASE

SpringBoot 2.2.0.RELEASE版本中@SpringBootApplication註解部分源碼如下所示:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
@ConfigurationPropertiesScan
public @interface SpringBootApplication {
//...
}

通過源碼我們可以看到2.2.0.RELEASE版本的@SpringBootApplication註解默認添加了ConfigurationPropertiesScan註解,也就是默認開啟了掃描@ConfigurationProperties註解的配置類,然後根據prefix進行屬性綁定。

2.2.1.RELEASE

SpringBoot 2.2.1.RELEASE版本中@SpringBootApplication註解部分源碼如下所示:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
//...
}

我們發現在SpringBoot2.2.1.RELEASE版本的@SpringBootApplication註解中已經不再默認添加@ConfigurationPropertiesScan註解的支持了,也就是我們無法通過默認的配置實現掃描@ConfigurationProperties註解的類,也無法將application.yml/application.properties文件的配置內容與實體類內的屬性進行綁定。

解決問題

SpringBoot官方給出的解決方法是手動在@SpringBootApplication註解的類上手動添加@ConfigurationPropertiesScan即可,如下所示:

/**
* 2.2.1.RELEASE版本屬性綁定問題解決
*
* @author
*/
@SpringBootApplication
@ConfigurationPropertiesScan
public class SpringbootConfigurationBindingBitPittedApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootConfigurationBindingBitPittedApplication.class, args);
}

}

敲黑板,劃重點

SpringBoot的每次中大版本升級往往會刪除或者新增一些功能,建議大家關注SpringBoot的動態,以免出現類似今天這篇文章的問題,根據官方的文檔及時做出調整。


作者:恆宇少年
原文鏈接:https://juejin.im/post/5de4b1fef265da05d96549ad


分享到:


相關文章: