欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring/SpringBoot:SpringBoot中@Value注入失败或取值为null解决方案

程序员文章站 2022-10-03 10:31:07
目录问题引出问题解决1.检测语法是否正确2.检测配置文件中是否有进行配置3.检测是否增加注解4.检测代码中的书写方式5.@Value无法注入static属性最终解决pomjarwar问题引出最近开发的项目中遇到了@Value注解无法引入值的问题,让我们来详细分析一下是什么原因。首先,贴代码config文件@Configurationpublic class InfluxdbConfig { @Value("${spring.inf...

目录

问题引出

问题解决

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

  •     <packaging>war</packaging>     【需要部署的项目】
    将此配置删除之后,@Value就能正确取值了。

本文地址:https://blog.csdn.net/iot5061/article/details/114002236