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

 更新时间:2021年07月07日 16:50:49   作者:CoderYin  
这篇文章主要介绍了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层注值

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅析git server“丢失”commit问题

    浅析git server“丢失”commit问题

    这篇文章主要介绍了git server“丢失”commit问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • java循环结构、数组的使用小结

    java循环结构、数组的使用小结

    这篇文章主要介绍了java循环结构、数组的使用小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • mybatis-plus主键生成策略

    mybatis-plus主键生成策略

    这篇文章主要介绍了mybatis-plus主键生成策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • java实现2048小游戏

    java实现2048小游戏

    这篇文章主要为大家详细介绍了java实现2048小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 详解Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    详解Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    这篇文章主要介绍了详解Spring的两种代理方式:JDK动态代理和CGLIB动态代理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • SpringBoot父子线程数据传递的五种方案介绍

    SpringBoot父子线程数据传递的五种方案介绍

    在实际开发过程中我们需要父子之间传递一些数据,比如用户信息等。该文章从5种解决方案解决父子之间数据传递困扰,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • 详解SpringBoot上传图片到阿里云的OSS对象存储中

    详解SpringBoot上传图片到阿里云的OSS对象存储中

    这篇文章主要介绍了SpringBoot上传图片到阿里云的OSS对象存储中,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java 时间相减算法题解示例

    Java 时间相减算法题解示例

    这篇文章主要为大家介绍了Java 时间相减算法题解示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • java实现科研信息管理系统

    java实现科研信息管理系统

    这篇文章主要为大家详细介绍了java科研信息管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • idea将maven项目改成Spring boot项目的方法步骤

    idea将maven项目改成Spring boot项目的方法步骤

    这篇文章主要介绍了idea将maven项目改成Spring boot项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论