Spring@Value使用获取配置信息为null的操作

网友投稿 433 2022-12-29

Spring@Value使用获取配置信息为null的操作

一、项目背景

1、介绍:

最近在springboot项目中需要做一个阿里云OSS图片上传功能点,将OSS图片上传代码提取到公共工具类中,为了方便其他模块调用。

2、问题介绍

在公共工具类中使用OSS一些自定义变量信息时会获取不到yml文件中http://定义的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层注值

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:免费的体育数据api接口(体育电竞接口API)
下一篇:免费的数据api接口(免费的数据api接口是什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~