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。

推薦閱讀: