springBoot項目中使用@Value取值出現的問題及解決
使用@Value取值出現的問題
在springBoot項目中我們一般會把一些路徑或者資源寫在配置文件中,方便管理。
但是取得時候有可能會出現一些問題。
file.uploadFolder=E://upload/
1.一般情況下定義一個字段
在上面使用@Value("${名稱}") 就可以得到值
@Value("${file.uploadFolder}") private String uploadFolder;
2.但是通常我們會把它用在工具類當中
但是字段又被static修飾成為靜態變量,使用這種方法就取不到值,我們拿到的就為null。
因此我們就要換一種取值方式,像下面這樣就可以取到瞭。切記set方法不要帶static!!!
private static String uploadFolder; public static String getUploadFolder() { return uploadFolder; } @Value("${file.uploadFolder}") public void setUploadFolder(String uploadFolder) { Base64Utils.uploadFolder = uploadFolder; }
3.工具類最好加上@Component或者其他註解
讓它由spring管理。
記springBoot使用@Value出現的烏龍
先看一下代碼
server.port=8007 #mysql配置 url=jdbc:mysql://localhost:3306/lzy_zyg?useUnicode=true&characterEncoding=UTF-8 username=root password=root
這是application.properties中填寫的相關配置信息,其中mysql配置是作為外部配置信息來用的。
然後在需要的地方如下使用
@Configuration public class JfinalDb { @Value("${url}") private String dbUrl; @Value("${username}") private String dbUName; @Value("${password}") private String dbPwd; ... }
使用的時候出現很詭異的問題,那就是命名設置的username和password是對的,通過本地連接也是對的,但是總是報連接認證失敗的錯誤,並且用戶名也不是root。
最後我將dbUName打印出來發現,完全不是root,而是我的主機名!
所以這裡,切記不要在application.properties文件中自定義名稱username,因為你取不到你想要的結果。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot如何讀取模板文件
- SpringBoot配置加載,各配置文件優先級對比方式
- Spring boot實現上傳文件到本地服務器
- springboot默認的5種加載路徑詳解
- Springboot yml如何獲取系統環境變量的值