Spring@Value使用获取配置信息为null的操作
作者:CoderYin 发布时间:2021-08-01 23:46:27
标签: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层注值
来源:https://blog.csdn.net/CoderYin/article/details/90173118


猜你喜欢
- 目录1、this代表了()的对象引用,super表示的是当前对象的()对象?2、输出内容是:3、下面程序的输出是:()4、执行下列代码的输出
- public static void main(String[] args) { System.out
- 之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复【普通消息类型消息】,这里将讲述多媒体消息的回复方法,【多媒体消
- ActiveMQ是Apache的一个开源项目,它是一个功能强劲的开源消息总线,也是一个中间件产品,它是JMS的一个实现。在介绍ActiveM
- 最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思
- 欢迎大家来学习本节内容,前几节我们已经学习了其他几种自定义控件,分别是Andriod 自定义控件之音频条及 Andriod 自定义控件之创建
- 一、进程线和程的概念线程: 一个线程是一个独立的执行流,每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 “同时
- 这篇文章主要介绍了如何使用两个栈实现队列Java,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 程序员讨厌写文档, 讨厌写注释, 而我还讨厌写日志, 输出一个 "Id=5, 姓名=王大锤
- 场景很多情况下,查单条记录也用通用查询接口,但是输入的条件却能确定唯一性。如果我们要确定list中只有一条记录,如下写法:// 记录不为空
- 一、File类的概述和构造方法public class Fileextends Objectimplements Serializable,
- @Order控制配置类/AOP/方法/字段的加载顺序1.AOP加载顺序 @Component &nbs
- 当我们需要制作动态炫酷科技感很强的UI时,美术一般会给我们提供一些序列图,这时候我们只需在程序里实现序列动画。一.动画机unity自带的帧动
- 介绍Objects Comparer是用于对象比较的工具,c#常见的数据结构都是可以用这个三方库进行对比,比较复杂的对象也是可以比较的。简而
- 本文实例讲述了Java权重随机的实现方法。分享给大家供大家参考。具体分析如下:权重随机在项目中经常用到,所以我把它抽象到一个工具类中。一般实
- 在 Java 中,LinkedList 和 ArrayList 的性能是不同的,具体取决于你所需要的操作。对于频繁的插入和删除操作,Link
- 引言在实际应用场景中,我们封装一个学生的类,这个类用于封装学生的日常行为,如:上学、吃饭、上课等。然而,在疫情期间,学生上学时入校、吃饭时进
- 求数组中最大的数的值:1、数组的max函数:class Program { &nb
- RocketMQ生产者发送消息分为三种模式RocketMQ生产者发送消息分为三种模式,分别是同步发送,异步发送和单向发送。单向发送,这个就是
- 对网页中各种不同格式的发布时间进行抽取,将发布时间以规整的“yyyy-MM-dd HH:mm:ss”格式表示出来,只能尽量追求精确,但是因为