一、錯誤場景:spring
springboot項目中在.properties文件(.yml)文件中配置了屬性值,在Bean中使用@Value註解引入該屬性,Bean的構造器中使用該屬性進行初始化,此時有可能會出現屬性值爲null,形成初始化程序的錯誤springboot
二、錯誤緣由:this
由於Bean的構造器調用是在@Value屬性賦值以前進行的,因此形成了屬性尚未賦值,就被調用的狀況。spa
三、解決方案:code
將構造器中須要使用的@Value屬性做爲構造器的參數,確保構造器中使用該屬性以前,屬性已經獲得初始化orm
理論先行,代碼跟上(^_^)blog
(1).yml配置文件中配置系統參數值 file.upload-dirget
file:
upload-dir: /Users/lc/temp/
(2)FileStorageService 的構造器須要使用使用 file.upload-dir 屬性io
@Service public class FileStorageService {
/* @Value("${file.upload-dir}")
private String uploadDir; */
public FileStorageService(@Value("${file.upload-dir}") String uploadDir) throws ServiceException { this.fileStorageLocation = Paths.get(uploadDir).toAbsolutePath().normalize(); try { Files.createDirectories(this.fileStorageLocation); } catch (Exception e) { throw new Exception(e); } } }
(3)now,問題解決了。class