Spring@Value使用獲取配置信息為null的操作
一、項目背景
1、介紹:
最近在springboot項目中需要做一個阿里云OSS圖片上傳功能點,將OSS圖片上傳代碼提取到公共工具類中,為了方便其他模塊調(diào)用。
2、問題介紹
在公共工具類中使用OSS一些自定義變量信息時會獲取不到y(tǒng)ml文件中定義的OSS參數(shù)。
3、問題分析
經(jīng)過分析確定,公共工具類方法沒有被spring 容器作為bean管理,所以獲取不到配置文件信息。以前我們經(jīng)常在controller層以及service層通過@Value獲取配置文件信息,該層都被spring容器作為bean管理,所以可以輕松獲取。
4、問題解決
新建一個參數(shù)獲取類,使用@Component注解修飾類。
參見如下代碼:
參數(shù)初始化:
@Component
public class AliyunOssConstants implements InitializingBean{
/**
* 阿里云OSS地域節(jié)點
*/
@Value("${aliyunOss.file.endpoint}")
private String endpoint;
/**
* 阿里云OSSaccessKeyId
*/
@Value("${aliyunOss.file.keyid}")
private String accessKeyId;
/**
* 阿里云OSSaccessKeySecret
*/
@Value("${aliyunOss.file.keysecret}")
private String accessKeySecret;
/**
* 阿里云OSSbucket名稱
*/
@Value("${aliyunOss.file.bg.bucketname}")
private String bg_bucketname;
/**
* 阿里云OSSBucket域名
*/
@Value("${aliyunOss.file.filehost}")
private String filehost;
public static String SPRING_FILE_ENDPOINT;
public static String SPRING_FILE_ACCESS_KEY_ID;
public static String SPRING_FILE_ACCESS_KEY_SECRET;
public static String SPRING_FILE_BG_BUCKET_NAME;
public static String SPRING_FILE_FILE_HOST;
@Override
public void afterPropertiesSet() throws Exception {
SPRING_FILE_ENDPOINT = endpoint;
SPRING_FILE_ACCESS_KEY_ID = accessKeyId;
SPRING_FILE_ACCESS_KEY_SECRET = accessKeySecret;
SPRING_FILE_BG_BUCKET_NAME = bg_bucketname;
SPRING_FILE_FILE_HOST = filehost;
}
}
使用參數(shù):
@Slf4j
public class AliyunOSSUtil {
private static String endpoint=AliyunOssConstants.SPRING_FILE_ENDPOINT;
private static String accessKeyId=AliyunOssConstants.SPRING_FILE_ACCESS_KEY_ID;
private static String accessKeySecret=AliyunOssConstants.SPRING_FILE_ACCESS_KEY_SECRET;
private static String bucketname=AliyunOssConstants.SPRING_FILE_BG_BUCKET_NAME;
private static String filehost=AliyunOssConstants.SPRING_FILE_FILE_HOST;
// 阿里云OSS上傳文件方法
}
@Value取不到值的原因
在springboot中想獲取配置文件中的值,一般的方法為
@Value("${tag}")
private String tagValue;
但是取值時,有時這個tagvalue為NULL,可能原因有:
1.類沒有加上@Component(或者@service等)
@Component //遺漏
class TestValue{
@Value("${tag}")
private String tagValue;
}
2.類被new新建了實例,而沒有使用@Autowired
@Component
class TestValue{
@Value("${tag}")
private String tagValue;
}
class Test{
...
TestValue testValue = new TestValue()
正確方式:
1.使用@Autowired注入
2.在controller層注值
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Java統(tǒng)計gitlab代碼行數(shù)
這篇文章主要介紹了如何使用Java統(tǒng)計gitlab代碼行數(shù),實現(xiàn)方式通過git腳本將所有的項目拉下來并然后通過進行代碼行數(shù)的統(tǒng)計,需要的朋友可以參考下2023-10-10
簡單快速對@RequestParam聲明的參數(shù)作校驗操作
這篇文章主要介紹了簡單快速對@RequestParam聲明的參數(shù)作校驗操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
java?實現(xiàn)獲取指定位置后的第一個數(shù)字
這篇文章主要介紹了java?實現(xiàn)獲取指定位置后的第一個數(shù)字,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
java使用common-fileupload實現(xiàn)文件上傳
這篇文章主要為大家詳細介紹了java使用common-fileupload實現(xiàn)文件上傳的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10
Java實現(xiàn)mybatis批量插入數(shù)據(jù)到Oracle
這篇文章主要為大家詳細介紹了Java實現(xiàn)mybatis批量插入數(shù)據(jù)到Oracle 的相關(guān)資料,需要的朋友可以參考下2016-06-06

