一、读取properties配置文件
新建配置文件config.properties,位于工程resources/conf/config.properties,内容如下:
paramsign.whitelist=/user/**,/order/**
后台读取配置信息
定义ParamSignProperties.java具体实现如下:
@Component
@PropertySource(value="classpath:conf/config.properties",ignoreResourceNotFound = true,encoding = "UTF-8")
@ConfigurationProperties(prefix="paramsign")
public class ParamSignProperties {
private List<String> whitelist = new ArrayList<>();
public List<String> getWhitelist() {
return whitelist;
}
public void setWhitelist(List<String> whitelist) {
this.whitelist = whitelist;
}
}
其他问题
1. 如果properties配置文件是位于工程外部(例如F:/conf/config.properties),如何加载?
可以使用如下方式:
@PropertySource(value="file:F:/conf/config.properties",ignoreResourceNotFound = true,encoding = "UTF-8")
2. 如果同时加载多个配置文件,并且不同配置文件中对同一个属性设置了不同的值,那么Spring会识别哪一个呢?
@PropertySource(value = {"classpath:config/config1.properties","classpath:config/config2.properties"})
结论:Spring加载顺序为从左到右顺序加载,后加载的会覆盖先加载的属性值。
3. 如果properties配置文件中属性含有中文,出现乱码问题,怎么办?
原因: idea对.properties默认编码为GBK,通常我们项目为UTF-8编码,这样程序在读取时就会出现乱码问题;
解决方法:idea 中 打开如下选项File->Sttings->Editor->File Encodings 将GBK修改为UTF-8并勾选Transparent native-to ascill conversion(在运行的时候转换成ascii码)
二、读取application文件
在application.yml或application.properties中编辑内容
book.name=高可用伸缩微服务架构
book.price=99
@value实现
@Value("${book.name:android深入浅出}")
private String name;
@Value("${book.price:100}")
private BigDecimal price;
Environment实现
@RestController
public class WebController {
@Autowired
private Environment env;
@RequestMapping("/book/info")
public String info(){
return String.format("书名:%s,价格:%f 元",env.getProperty("book.name"),env.getProperty("book.price"));
}
}
Environment也可以通过ApplicationContext获取,例如:
@Autowired
ApplicationContext applicationContext;
String name = applicationContext.getEnvironment().getProperty("book.name");
@ConfigurationProperties 实现
@Component
@ConfigurationProperties(prefix="book")
public class BookProperties {
private String name;
private BigDecimal price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}