spring boot/cloud 注入yml / properties文件配置信息@Value注解注入static静态方法失败问题,及中文乱码问题

 

场景

@Value 注解在 static 静态方法中注入失败,得到结果null ,

原因:@value不能直接注入值给静态属性,spring 不允许/不支持把值注入到静态变量中。

错误案例:取值不到,null

@Value("${test01}")
private static String test01;

----------------------------------------------------------------------------------------------------------------------------------------

 注解:

@Value("${test01}")

使用方法

  • yml文件配置信息
test01: halloWorld
  • 非静态
@Value("${test01}")
private String test01;

public void test() {
    System.out.println("test01:"+test01);
}
  • 静态

private String test01;

@Value("${test01}")
public void setTest01(String test01) {
   this.test01 = test01;
}

public static void test() {
    System.out.println("test01:"+test01);
}

还可使用另一种方案

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class YmlConfig {
    //静态方法取值
    public static String TEST01;
    public static String TEST02;

    //其他方法取值
    @Value("${test01}")
    private String test01;
    @Value("${test02}")
    private String test02;

    @PostConstruct
    public void init() {
        TEST01 = this.test01;
        TEST02 = this.test02;        
    }
}

 使用

@Autowired
private YmlConfig config;


public void Test01(String test01) {
   String test01 = config.TEST01;
   System.out.println(test01);

   //有写get方法也可以这样使用
   String test02 = config.getTest02();
   System.out.println(test02);
}

/**
 * 静态方法
 */
public static void Test01(String test01) {
   String test01 = config.TEST01;
   System.out.println(test01);
}

 

.properites 中文乱码问题解决

test02: 中文

使用@Value 的方式获取得到乱码,原因:用@Value注解读取application.properties文件时,编码默认是ISO-8859-1

解决的方式很多,但是大厂都会把中文转换成 unicode 方式,因为代码中除了注释,其他都避免出现中文。

解决方案

test02: \u4e2d\u6587

 

你可能感兴趣的:(spring,boot,异常解决方案,java)