前言:
Spring框架是主流框架,使用过程中经常需要在properties配置文件中配置数值,而有时候又需要在代码中获取其值。下面就为大家介绍获取配置值的三种方式:
第一种方式:使用注解@Value("属性名")
代码:
@Value("${jcpt.domain}")
private String domain; //基础平台域名
易错点:如果变量名被static修饰,是无法注入值的:
@Value("${jcpt.domain}") //被static修饰的变量无法注入值
private static String domain; //基础平台域名
解决办法: 将注解转移到set方法上:
public class A {
private static String domain; //基础平台域名
@Value("${jcpt.domain}")
public void setDomain(String domain) {
A.domain = domain;
}
}
但是要注意的是:“如果set方法也被statis修饰的话,也是无法注入值的!”
第二种方式:
使用注解@ConfigurationProperties(prefix = "属性名")
该方式是通过反射将值映射到bean,从而实现赋值。
代码:
properties配置文件:
###第三方跳转是否走基础数据平台验证的开关
es.security.common.isBoolean = false
//注意配置文件的属性名必须是 “注入的属性名.” + "对象名." + "对象属性名“
java类:
@ConfigurationProperties(prefix = "es.security")
public class SecurityMainProperties {
/**
* 通用属性配置
*/
private CommonProperties common = new CommonProperties();
//get ,set ……
}
CommonProperties类:
public class CommonProperties {
private boolean isBoolean=true;
//get,set ……
}
原理:
1.首先@ConfigurationProperties中指明了配置未见的路径“es.security”也就表名了这个类下的属性要匹配properties配置文件中带有es.security前缀的值;
2.SecurityMainProperties 类中有CommonProperties的对象属性,属性名叫common,这个变量名正好对应“es.security.common”,而common是个对象,所以继续向下映射CommonProperties类下的isBoolean属性,这个属性整对应了完整的配置文件中的“es.security.common.isBoolean”。
第三种方式(不推荐):读取配置文件,再解析
我们可以采用IO流先将配置文件只能够的值全部读取出来,再进行匹配
StringBuffer buffer = new StringBuffer();
//获取资源模版文件
File sources= ResourceUtils.getFile("classpath:keyWord.txt");
BufferedReader bf = new BufferedReader(new FileReader(sources));
String s ;
while((s = bf.readLine())!=null){
buffer.append(s.trim());
}
通过以上的代码能够将配置文件的所有值连接成字符串,再进行解析即可。此方式较为愚蠢,不建议使用。此方式只适合获取配置文件的全部值,若取局部值建议使用前两种方式。