@Value注解使⽤过程中遇到的⼀些坑形容时间快的句子
笔者结合之前的⼀些经验教训,再结合⼀些资料总结了⼀下@Value注解使⽤过程中的⼀些注意事项。
⽬录
以下所有的配置的前提是注解必须是放置于Spring组件中才能⽣效
⼀、@Value⽆法读取配置⽂件中的参数
这个坑是笔者前段时间⾃建springboot项⽬的时候发现的,当时笔者想在配置⽂件中加⼀些参数,然后使⽤这个注解直接调⽤,可是发现⽆路如何也获取不到这个参数(笔者⽤的是l配置⽂件)。
原因:springboot项⽬是⽆法识别bootstrap⽂件的,springboot项⽬默认的配置⽂件是application.properties,所以如果将参数写⼊bootstrap配置⽂件,然后再⽤@Value注解,是⽆法读取参数的。
解决办法:
1、将参数写到application.properties配置⽂件中;
2、添加下⽅的依赖,让springboot也能识别l的配置⽂件;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.1</version>
</dependency>感动的电影
读取配置文件失败⼆、@Value出现中⽂乱码
笔者也是在今天配置⼀个中⽂路径的时候发现的这个问题,当时报的异常是⽆法到⽬标⽂件,仔细⼀检查才发现中⽂乱码的问题。
红枣的功效与作用原因:⽤@Value注解读取application.properties⽂件时,编码默认是ISO-8859-1,所以直接配置中⽂⼀定会乱码。
解决办法:
1、通过@PropertySource(value=“classpath:my.properties”, encoding=“UTF-8”)注解配置⾃定义配置⽂件,注意⽂件名不能是
springboot默认的application.properties⽂件名称;
2、使⽤yml/yaml格式的配置⽂件配置中⽂参数,springboot读该⽂件默认采⽤UTF-8编码。
三、@Value使⽤的⼀些⼩技巧
1、@Value注解可以解读字符串数组
台湾花花
只需要在配置⽂件中将两个字符串以逗号隔开,然后添加@Value注解的属性⽤字符串集合接收,就可以达到读取字符串数组的的⽬的。下⾯是⽰例代码:
Java中的接收属性
@Value("${muyichen.whitePaths}")
private List<String> whitePaths;
配置⽂件中的配置属性
muyichen.whitePaths=www.baidu,www.qq,www.muyichen
2、@Value注解可以直接注⼊对象
只需要在@Value属性中使⽤#{}就可以指定读取对象了,如下:美白祛斑产品
@Value("#{userService}")
private UserService userService;
注意:userService是对象注⼊到spring容器所使⽤的beanName,如果userService对应的类型并不是当前属性需要的类型的话,会抛异常