使用@value注解取不到application.xml配置文件中的值問題
@value注解取不到application.xml的值
報錯信息
今天從碼云上拉下來代碼,突然發(fā)現系統(tǒng)跑不起來了,報錯信息如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.cache.type' in value "${spring.cache.type}"

開發(fā)組最近都忙著寫業(yè)務層代碼,一般來說不會碰配置文件里的東西,莫名其妙就出現了這個錯誤。
原來代碼
Java代碼如下:
@Configuration
public class ShiroConfig {
@Value("${spring.cache.type}")
private String cacheType;
@Value("${server.session-timeout}")
private int tomcatTimeout;
}

配置文件:

pom.xml原文件:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
問題原因
pom.xml中的resource設置的不正確
pom.xml修改后:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
思考
比較神奇的是,修改pom文件后啟動成功了,然后再把它改回原來的樣子,也不會報錯了。Maven clean,Rebuild Project等操作后重啟也都可以的。有點搞不懂。
拓展閱讀
resources:描述工程中資源的位置targetPath:指定build資源到哪個目錄,默認是base directoryfiltering:指定是否將filter文件(即build下的filters里定義的*.property文件)的變量值在這個resource文件有效,例如上面就指定那些變量值在configuration文件無效。directory:指定屬性文件的目錄,build的過程需要找到它,并且將其放到targetPath下,默認的directory是${basedir}/src/main/resourcesincludes:指定包含文件的patterns,符合樣式并且在directory目錄下的文件將會包含進project的資源文件。excludes:指定不包含在內的patterns,如果inclues與excludes有沖突,那么excludes勝利,那些符合沖突的樣式的文件是不會包含進來的。testResources:這個模塊包含測試資源元素,其內容定義與resources類似,不同的一點是默認的測試資源路徑是${basedir}/src/test/resources,測試資源是不部署的。
一般情況下:
如果沒有指定resources,自動會將classpath下的src/main/java下的.class文件和src/main/resources下的.xml文件放到target里頭的classes文件夾下的package下的文件夾里。
如果設定了resources,那么默認的就會失效,就會以指定的includes和excludes為準。
例如,為了使打包的jar包里頭包含.java源文件。
工具類@Value取不到值
工具類里@Value取不到值,如下圖


原因是new的對象

改為

EncryptIdCardUtil類方法改為非靜態(tài)方法,ConnectService類由new改為@Autowired注入

RiskService里也由直接調用EncryptIdCardUtil里的靜態(tài)方法,改為EncryptIdCardUtil類@Autowired注入

就可以了

總結:
1.@Value不能靜態(tài)成員上使用;
2.使用@Value讀取屬性值的類對象需要交給spring容器管理。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決SpringBoot運行Test時報錯:SpringBoot Unable to find
這篇文章主要介紹了SpringBoot運行Test時報錯:SpringBoot Unable to find a @SpringBootConfiguration,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
IDEA2020.2.3 "reading maven projects"卡住的問題
這篇文章主要介紹了IDEA2020.2.3 "reading maven projects"卡住的問題及問題原因探究,通過多種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-10-10

