Spring@Value使用獲取配置信息為null的操作
一、項(xiàng)目背景
1、介紹:
最近在springboot項(xiàng)目中需要做一個(gè)阿里云OSS圖片上傳功能點(diǎn),將OSS圖片上傳代碼提取到公共工具類中,為了方便其他模塊調(diào)用。
2、問(wèn)題介紹
在公共工具類中使用OSS一些自定義變量信息時(shí)會(huì)獲取不到y(tǒng)ml文件中定義的OSS參數(shù)。
3、問(wèn)題分析
經(jīng)過(guò)分析確定,公共工具類方法沒(méi)有被spring 容器作為bean管理,所以獲取不到配置文件信息。以前我們經(jīng)常在controller層以及service層通過(guò)@Value獲取配置文件信息,該層都被spring容器作為bean管理,所以可以輕松獲取。
4、問(wèn)題解決
新建一個(gè)參數(shù)獲取類,使用@Component注解修飾類。
參見(jiàn)如下代碼:
參數(shù)初始化:
@Component public class AliyunOssConstants implements InitializingBean{ /** * 阿里云OSS地域節(jié)點(diǎn) */ @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;
但是取值時(shí),有時(shí)這個(gè)tagvalue為NULL,可能原因有:
1.類沒(méi)有加上@Component(或者@service等)
@Component //遺漏 class TestValue{ @Value("${tag}") private String tagValue; }
2.類被new新建了實(shí)例,而沒(méi)有使用@Autowired
@Component class TestValue{ @Value("${tag}") private String tagValue; } class Test{ ... TestValue testValue = new TestValue()
正確方式:
1.使用@Autowired注入
2.在controller層注值
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot與Redis的緩存一致性問(wèn)題解決
在使用緩存時(shí),緩存一致性問(wèn)題是一個(gè)常見(jiàn)的挑戰(zhàn),本文主要介紹了Spring?Boot與Redis的緩存一致性問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07如何使用Java統(tǒng)計(jì)gitlab代碼行數(shù)
這篇文章主要介紹了如何使用Java統(tǒng)計(jì)gitlab代碼行數(shù),實(shí)現(xiàn)方式通過(guò)git腳本將所有的項(xiàng)目拉下來(lái)并然后通過(guò)進(jìn)行代碼行數(shù)的統(tǒng)計(jì),需要的朋友可以參考下2023-10-10使用Java校驗(yàn)SQL語(yǔ)句的合法性五種解決方案
這篇文章主要介紹了如何用java校驗(yàn)SQL語(yǔ)句的合法性(提供五種解決方案),使用JDBC?API和JSqlParser庫(kù)、正則表達(dá)式、ANTLR解析器生成器或Apache?Calcite庫(kù)都可以實(shí)現(xiàn)校驗(yàn)SQL語(yǔ)句的合法性,需要的朋友可以參考下2023-04-04簡(jiǎn)單快速對(duì)@RequestParam聲明的參數(shù)作校驗(yàn)操作
這篇文章主要介紹了簡(jiǎn)單快速對(duì)@RequestParam聲明的參數(shù)作校驗(yàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字
這篇文章主要介紹了java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01java使用common-fileupload實(shí)現(xiàn)文件上傳
這篇文章主要為大家詳細(xì)介紹了java使用common-fileupload實(shí)現(xiàn)文件上傳的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Java實(shí)現(xiàn)mybatis批量插入數(shù)據(jù)到Oracle
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)mybatis批量插入數(shù)據(jù)到Oracle 的相關(guān)資料,需要的朋友可以參考下2016-06-06