溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用@value注解取不到application.xml配置文件中的值怎么解決

發(fā)布時間:2022-03-21 13:34:28 來源:億速云 閱讀:514 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“使用@value注解取不到application.xml配置文件中的值怎么解決”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

@value注解取不到application.xml的值

報錯信息

今天從碼云上拉下來代碼,突然發(fā)現(xiàn)系統(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}"

使用@value注解取不到application.xml配置文件中的值怎么解決

開發(fā)組最近都忙著寫業(yè)務層代碼,一般來說不會碰配置文件里的東西,莫名其妙就出現(xiàn)了這個錯誤。

原來代碼

Java代碼如下:

@Configuration
public class ShiroConfig {    
    @Value("${spring.cache.type}")
    private String cacheType;
    @Value("${server.session-timeout}")
    private int tomcatTimeout;
}

使用@value注解取不到application.xml配置文件中的值怎么解決

配置文件:

使用@value注解取不到application.xml配置文件中的值怎么解決

pom.xml原文件:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

問題原因

pom.xml中的resource設(shè)置的不正確

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 directory

  • filtering:指定是否將filter文件(即build下的filters里定義的*.property文件)的變量值在這個resource文件有效,例如上面就指定那些變量值在configuration文件無效。

  • directory:指定屬性文件的目錄,build的過程需要找到它,并且將其放到targetPath下,默認的directory是${basedir}/src/main/resources

  • includes:指定包含文件的patterns,符合樣式并且在directory目錄下的文件將會包含進project的資源文件。

  • excludes:指定不包含在內(nèi)的patterns,如果inclues與excludes有沖突,那么excludes勝利,那些符合沖突的樣式的文件是不會包含進來的。

  • testResources:這個模塊包含測試資源元素,其內(nèi)容定義與resources類似,不同的一點是默認的測試資源路徑是${basedir}/src/test/resources,測試資源是不部署的。

一般情況下:

如果沒有指定resources,自動會將classpath下的src/main/java下的.class文件和src/main/resources下的.xml文件放到target里頭的classes文件夾下的package下的文件夾里。

如果設(shè)定了resources,那么默認的就會失效,就會以指定的includes和excludes為準。

例如,為了使打包的jar包里頭包含.java源文件。

工具類@Value取不到值

工具類里@Value取不到值,如下圖

使用@value注解取不到application.xml配置文件中的值怎么解決

使用@value注解取不到application.xml配置文件中的值怎么解決

原因是new的對象

使用@value注解取不到application.xml配置文件中的值怎么解決

改為

使用@value注解取不到application.xml配置文件中的值怎么解決

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

使用@value注解取不到application.xml配置文件中的值怎么解決

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

使用@value注解取不到application.xml配置文件中的值怎么解決

就可以了

使用@value注解取不到application.xml配置文件中的值怎么解決

“使用@value注解取不到application.xml配置文件中的值怎么解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI