目錄
問題引出
問題解決
1.檢測語法是否正確
2.檢測組態檔中是否有進行配置
3.檢測是否增加注解
4.檢測代碼中的書寫方式
5.@Value無法注入static屬性
最終解決
問題引出
最近開發的專案中遇到了@Value注解無法引入值的問題,讓我們來詳細分析一下是什么原因,
首先,貼代碼
config檔案
@Configuration
public class InfluxdbConfig {
@Value("${spring.influx.url:''}")
private String influxDBUrl;
@Value("${spring.influx.user:''}")
private String userName;
..................
}
yml檔案
spring:
influx:
url: http://127.0.0.1:8086
user: 123
password: 123
@Value注入的值為‘’,只取到了默認值,沒有獲取到yml中的值,將默認值取消后@Value("${spring.influx.url}"),運行程式報錯
Could not resolve placeholder 'spring.influx.url' in value "${spring.influx.url}"
很明顯沒有注入成功,接下來我們進行問題的解決
問題解決
經過查詢,網路上大概有這五種解決方案,
1.檢測語法是否正確
@Value("${spring.influx.url:''}")
private String influxDBUrl;
語法正確,沒有問題
2.檢測組態檔中是否有進行配置
.yml檔案配置正確,沒有例外
3.檢測是否增加注解
在spring中,使用了spring的注解,那么就需要使用spring來進行管理物件,而不能自己進行new,否則就會導致失敗,
使用了@Configuration注解,也沒有問題,
4.檢測代碼中的書寫方式
不要再無參構造器中,進行new物件的操作,否則就會造成@Value注解失敗,
5.@Value無法注入static屬性
使用@Value直接放在static的屬性上是無法注入內容的!!!此方式會一直是null.
五種方案都嘗試之后,發現問題還是沒有解決
最終解決
結果無數次排查,始終沒有找到原因,最后在pom.xml發現了問題
<artifactId>handler</artifactId>
<packaging>pom</packaging>
<name>handler</name>
就是這個<packaging>,竟然設定成了pom,此屬性可設定三種引數,分別為:
<package> 屬性表示專案的打包型別【默認:jar型別】
-
pom
<packaging>pom</packaging> 【父型別及抽出的公共組件都為pom型別,沒有application檔案,不能單獨啟動運行】 -
jar
<packaging>jar</packaging> 【內部呼叫或者是做服務使用】 -
war
-
將此配置洗掉之后,@Value就能正確取值了,<packaging>war</packaging> 【需要部署的專案】
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263401.html
標籤:其他
上一篇:MyBatis 進階知識
下一篇:多執行緒基礎
