好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

一、项目背景

1、介绍:

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

2、问题介绍

在公共工具类中使用OSS一些自定义变量信息时会获取不到yml文件中定义的OSS参数。

3、问题分析

经过分析确定,公共工具类方法没有被spring 容器作为bean管理,所以获取不到配置文件信息。以前我们经常在controller层以及service层通过@Value获取配置文件信息,该层都被spring容器作为bean管理,所以可以轻松获取。

4、问题解决

新建一个参数获取类,使用@Component注解修饰类。

参见如下代码:

参数初始化:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

@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;

  }

}

使用参数:

?

1

2

3

4

5

6

7

8

9

@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中想获取配置文件中的值,一般的方法为

?

1

2

@Value ( "${tag}" )

private String tagValue;

但是取值时,有时这个tagvalue为NULL,可能原因有:

1.类没有加上@Component(或者@service等)

?

1

2

3

4

5

@Component //遗漏

class TestValue{

     @Value ( "${tag}" )

     private String tagValue;

}

2.类被new新建了实例,而没有使用@Autowired

?

1

2

3

4

5

6

7

8

@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的操作的详细内容...

  阅读:27次