使用@value注解取不到application.xml配置文件中的值问题

 更新时间:2022年03月21日 11:30:32   作者:jgsdh.com  
这篇文章主要介绍了使用@value注解取不到application.xml配置文件中的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

报错信息

今天从码云上拉下来代码,突然发现系统跑不起来了,报错信息如下:

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}"

开发组最近都忙着写业务层代码,一般来说不会碰配置文件里的东西,莫名其妙就出现了这个错误。

原来代码

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 directory
  • filtering:指定是否将filter文件(即build下的filters里定义的*.property文件)的变量值在这个resource文件有效,例如上面就指定那些变量值在configuration文件无效。
  • directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources
  • includes:指定包含文件的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类方法改为非静态方法,ConnectService类由new改为@Autowired注入

RiskService里也由直接调用EncryptIdCardUtil里的静态方法,改为EncryptIdCardUtil类@Autowired注入

就可以了

总结:

1.@Value不能静态成员上使用;

2.使用@Value读取属性值的类对象需要交给spring容器管理。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 遍历取出Map集合key-value数据的4种方法

    Java 遍历取出Map集合key-value数据的4种方法

    这篇文章主要介绍了Java 遍历取出Map集合key-value数据的4种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Spring Boot打包war jar 部署tomcat

    Spring Boot打包war jar 部署tomcat

    这篇文章主要介绍了Spring Boot打包war jar 部署tomcat的相关资料,需要的朋友可以参考下
    2017-10-10
  • java.io.NotSerializableException异常的问题及解决

    java.io.NotSerializableException异常的问题及解决

    这篇文章主要介绍了java.io.NotSerializableException异常的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java实现枚举状态转换的方法详解

    Java实现枚举状态转换的方法详解

    在软件开发中,我们经常需要处理不同系统或模块间的状态转换,今天,我将通过一个电商订单与物流状态的转换案例,展示如何优雅地实现枚举间的互相转换,需要的朋友可以参考下
    2025-04-04
  • Java 根据贷款年限对应利率计算功能实现解析

    Java 根据贷款年限对应利率计算功能实现解析

    这篇文章主要介绍了Java 根据贷款年限对应利率计算功能实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • SpringBoot配置@Configuration注解和@bean注解

    SpringBoot配置@Configuration注解和@bean注解

    这篇文章主要介绍了SpringBoot配置@Configuration注解和@bean注解,文章围绕主题相关内容展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • Java线程等待用法实例分析

    Java线程等待用法实例分析

    这篇文章主要介绍了Java线程等待用法,结合实例形式分析了obj.wait()实现线程等待相关原理与操作技巧,需要的朋友可以参考下
    2018-09-09
  • Mybatis持久层框架入门之CRUD实例代码详解

    Mybatis持久层框架入门之CRUD实例代码详解

    这篇文章主要介绍了Mybatis持久层框架入门之CRUD实例,需要的朋友可以参考下
    2022-05-05
  • SpringBoot执行有返回值的异步任务问题

    SpringBoot执行有返回值的异步任务问题

    这篇文章主要介绍了SpringBoot执行有返回值的异步任务问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 详解Spring如何避免被JVM 垃圾回收

    详解Spring如何避免被JVM 垃圾回收

    如果Spring 被回收掉,Spring管理的bean全部会被回收,那我们的Java应用不就被一锅端了吗?所以本文小编将和大家一起聊聊Spring如何避免被JVM垃圾回收,需要的朋友可以参考下
    2023-11-11

最新评论