SpringBoot中@Value注入失敗問題解決步驟
SpringBoot中@Value注入失敗問題解決步驟
1. 第一步檢測語法是否正確
@Value("${aes.key}")
private String key;
@Value("${aes.secret}")
private String secret;2.第二步檢測配置文件中是否有進(jìn)行配置
aes: key: xxxx secret: xxxxxxx
3.第三步檢測類是否增加了能被spring管理的注解
在spring中,使用了spring的注解,那么就需要使用spring來進(jìn)行管理對象,而不能自己進(jìn)行new,否則就會導(dǎo)致失敗。例如類 @Controller @Service @Component 等能被spring管理的注解
4.第四步檢測配置yml
若有多個(gè)配置必須每個(gè)配置中都添加上配置
aes:
key: xxxx
secret: xxxxxxx

5.第五步
若application.yml和bootStrap.yml在同一目錄下,則bootStrap.yml的加載順序要高于application.yml,如果當(dāng)前配置文件名稱為application.yml,即使配置文件中存在所使用的屬性key,使用@Value注解也會報(bào)錯,因?yàn)樵趩禹?xiàng)目時(shí)@Value只能檢索到優(yōu)先及最高的配置文件,也就是bootStrap.yml
原理:
- bootstrap.yml用于應(yīng)用程序上下文的引導(dǎo)階段,由父Spring ApplicationContext加載。bootstrap.yml 可以理解成系統(tǒng)級別的一些參數(shù)配置,這些參數(shù)一般是不會變動的。
- application.yml可以用來定義應(yīng)用級別的,如果搭配 spring-cloud-config 使用 application.yml 里面定義的文件可以實(shí)現(xiàn)動態(tài)替換。
補(bǔ)充:Spring Boot 項(xiàng)目中 @Value 注解失效問題
Spring Boot 項(xiàng)目中 @Value 注解失效問題
問題描述
在 Spring Boot 項(xiàng)目中,我們使用 @Value 注解從 application.yml 配置文件中注入配置值。但是,由于同事直接 new 創(chuàng)建了含有 @Value 注解的類實(shí)例,導(dǎo)致注解失效。
配置文件 application.yml
# ${service-model} 讀取的是 pom.xml 文件中自定義的屬性,可以直接定義,例如:test
service-model: ${service-model}實(shí)體類 Demo
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class Demo {
@Value("${service-model}")
private String serviceModel;
public void getValue() {
System.out.println("serviceModel = " + serviceModel);
}
}
// 輸出結(jié)果為 null,因?yàn)?@Value 注解失效處理邏輯
由于 @Value 注解失效,我們使用 SnakeYAML 庫直接讀取 yml 配置文件并獲取配置信息。
導(dǎo)入依賴
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.31</version>
</dependency>創(chuàng)建讀取配置工具類 YamlUtil
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 獲取 YAML 配置文件參數(shù)
*/
public class YamlUtil {
public static Map<String, Object> getConfigInfo(String fileName) {
Yaml yaml = new Yaml(new Constructor(Map.class));
Map<String, Object> config = new HashMap<>();
try (InputStream inputStream = YamlUtil.class.getClassLoader().getResourceAsStream(fileName)) {
// 加載 YAML 文件
config = yaml.load(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return config;
}
}使用方法
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Demo {
public void getValue() {
Map<String, Object> configInfo = YamlUtil.getConfigInfo("application.yml");
String serviceModel = (String) configInfo.get("service-model");
System.out.println("serviceModel = " + serviceModel);
}
}
// 輸出結(jié)果為 "test",因?yàn)橥ㄟ^ YamlUtil 成功讀取了配置文件總結(jié)
通過上述步驟,我們解決了 @Value 注解失效的問題,并提供了一個(gè)替代方案來讀取配置文件中的值。這樣可以確保即使在 @Value 注解無法正常工作的情況下,也能正確地獲取配置信息。
到此這篇關(guān)于SpringBoot中@Value注入失敗問題解決步驟的文章就介紹到這了,更多相關(guān)SpringBoot @Value注入失敗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot基于數(shù)據(jù)庫實(shí)現(xiàn)定時(shí)任務(wù)過程解析
這篇文章主要介紹了SpringBoot基于數(shù)據(jù)庫實(shí)現(xiàn)定時(shí)任務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
一篇文章帶你搞定SpringBoot不重啟項(xiàng)目實(shí)現(xiàn)修改靜態(tài)資源
這篇文章主要介紹了一篇文章帶你搞定SpringBoot不重啟項(xiàng)目實(shí)現(xiàn)修改靜態(tài)資源,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
SpringBoot引入Redis報(bào)org.springframework.data.redis.core.RedisT
這篇文章主要介紹了SpringBoot引入Redis報(bào)org.springframework.data.redis.core.RedisTemplate類找不到錯誤問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09
Spring項(xiàng)目如何實(shí)現(xiàn)帶請求鏈路id的日志記錄
我們在做項(xiàng)目的時(shí)候通常需要通過請求日志來排查定位線上問題,如果日志比較多而我們又需要查找整個(gè)請求的全部日志的時(shí)候會比較困難,下面我們就來看看如何用java aop實(shí)現(xiàn)請求id的日志記錄吧2024-12-12
Activiti7與Spring以及Spring Boot整合開發(fā)
這篇文章主要介紹了Activiti7與Spring以及Spring Boot整合開發(fā),在Activiti中核心類的是ProcessEngine流程引擎,與Spring整合就是讓Spring來管理ProcessEngine,有感興趣的同學(xué)可以參考閱讀2023-03-03
SpringBoot依賴和代碼分開打包的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot依賴和代碼分開打包的實(shí)現(xiàn)步驟,,這種方法將依賴和代碼分開打包,一般更新只有代碼修改,Pom文件是不會經(jīng)常改動的,感興趣的可以了解一下2023-10-10

