Spring/SpringBoot:SpringBoot中@Value注入失败或取值为null解决方案
目录问题引出问题解决1.检测语法是否正确2.检测配置文件中是否有进行配置3.检测是否增加注解4.检测代码中的书写方式5.@Value无法注入static属性最终解决pomjarwar问题引出最近开发的项目中遇到了@Value注解无法引入值的问题,让我们来详细分析一下是什么原因。首先,贴代码config文件@Configurationpublic class InfluxdbConfig {@Val
目录
问题引出
最近开发的项目中遇到了@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> 【需要部署的项目】
更多推荐
所有评论(0)