Spring@Value使用获取配置信息为null的操作
作者:CoderYin 时间:2021-08-01 23:46:27
一、项目背景
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层注值
来源:https://blog.csdn.net/CoderYin/article/details/90173118
标签:Spring,@Value,配置信息,null
0
投稿
猜你喜欢
关于Java反编译字节码文件
2021-10-07 01:41:32
Mybatis-Plus注入SQL原理分析
2022-11-09 21:17:22
Android超清晰6.0权限申请AndPermission
2023-08-05 10:52:26
Spring中SmartLifecycle和Lifecycle的作用和区别
2023-11-18 22:55:50
Java8 HashMap键与Comparable接口小结
2023-11-29 10:10:31
springboot post接口接受json时,转换为对象时,属性都为null的解决
2023-06-17 15:24:23
一文带你真正理解Java中的内部类
2023-11-24 20:42:07
springboot使用自定义注解实现aop切面日志
2023-11-11 09:14:48
java中Hashmap的get方法使用
2023-10-29 13:10:05
C#超市收银系统设计
2023-06-21 00:00:09
简述Mybatis增删改查实例代码
2023-03-06 18:07:53
详解利用spring-security解决CSRF问题
2023-07-31 14:31:19
java识别一篇文章中某单词出现个数的方法
2022-04-24 06:18:40
java property配置文件管理工具框架过程详解
2023-10-12 04:35:50
SpringBoot中整合MyBatis-Plus-Join使用联表查询的实现
2023-11-28 19:00:26
JDK源码之PriorityQueue解析
2022-05-15 17:17:15
Java实现天天酷跑小游戏完整代码(附源码)
2021-08-03 09:43:43
Java简单实现UDP和TCP的示例
2021-08-02 14:57:48
Java8中的LocalDateTime和Date一些时间操作方法
2022-06-28 12:28:57
IDEA项目maven project没有出现plugins和Dependencies问题
2021-08-08 10:59:53