Spring@Value使用获取配置信息为null的操作,
分享于 点击 48195 次 点评:113
Spring@Value使用获取配置信息为null的操作,
一、项目背景
1、介绍:
最近在springboot项目中需要做一个阿里云OSS图片上传功能点,将OSS图片上传代码提取到公共工具类中,为了方便其他模块调用。
2、问题介绍
在公共工具类中使用OSS一些自定义变量信息时会获取不到yml文件中定义的OSS参数。
3、问题分析
经过分析确定,公共工具类方法没有被spring 容器作为bean管理,所以获取不到配置文件信息。以前我们经常在controller层以及service层通过@Value获取配置文件信息,该层都被spring容器作为bean管理,所以可以轻松获取。
4、问题解决
新建一个参数获取类,使用@Component注解修饰类。
参见如下代码:
参数初始化:
@Component public class AliyunOssConstants implements InitializingBean{ /** * 阿里云OSS地域节点 */ @Value("${aliyunOss.file.endpoint}") private String endpoint; /** * 阿里云OSSaccessKeyId */ @Value("${aliyunOss.file.keyid}") private String accessKeyId; /** * 阿里云OSSaccessKeySecret */ @Value("${aliyunOss.file.keysecret}") private String accessKeySecret; /** * 阿里云OSSbucket名称 */ @Value("${aliyunOss.file.bg.bucketname}") private String bg_bucketname; /** * 阿里云OSSBucket域名 */ @Value("${aliyunOss.file.filehost}") private String filehost; public static String SPRING_FILE_ENDPOINT; public static String SPRING_FILE_ACCESS_KEY_ID; public static String SPRING_FILE_ACCESS_KEY_SECRET; public static String SPRING_FILE_BG_BUCKET_NAME; public static String SPRING_FILE_FILE_HOST; @Override public void afterPropertiesSet() throws Exception { SPRING_FILE_ENDPOINT = endpoint; SPRING_FILE_ACCESS_KEY_ID = accessKeyId; SPRING_FILE_ACCESS_KEY_SECRET = accessKeySecret; SPRING_FILE_BG_BUCKET_NAME = bg_bucketname; SPRING_FILE_FILE_HOST = filehost; } }
使用参数:
@Slf4j public class AliyunOSSUtil { private static String endpoint=AliyunOssConstants.SPRING_FILE_ENDPOINT; private static String accessKeyId=AliyunOssConstants.SPRING_FILE_ACCESS_KEY_ID; private static String accessKeySecret=AliyunOssConstants.SPRING_FILE_ACCESS_KEY_SECRET; private static String bucketname=AliyunOssConstants.SPRING_FILE_BG_BUCKET_NAME; private static String filehost=AliyunOssConstants.SPRING_FILE_FILE_HOST; // 阿里云OSS上传文件方法 }
@Value取不到值的原因
在springboot中想获取配置文件中的值,一般的方法为
@Value("${tag}") private String tagValue;
但是取值时,有时这个tagvalue为NULL,可能原因有:
1.类没有加上@Component(或者@service等)
@Component //遗漏 class TestValue{ @Value("${tag}") private String tagValue; }
2.类被new新建了实例,而没有使用@Autowired
@Component class TestValue{ @Value("${tag}") private String tagValue; } class Test{ ... TestValue testValue = new TestValue()
正确方式:
1.使用@Autowired注入
2.在controller层注值
以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。
您可能感兴趣的文章:- Springboot @Value获取值为空问题解决方案
- Spring @Value注解失效问题解决方案
- 详解Spring关于@Resource注入为null解决办法
- spring中@value注解需要注意的问题
- Springboot中@Value的使用详解
用户点评