一、springboot读取XXX.properties自定义配置文件读取
SpringBoot推荐自动配置,但多数情况由于业务等需求需要我们手动配置一些参数。SpringBoot可以识别两种格式的配置文件,分别是yml文件与properties文件,我们可以将application.properties文件换成application.yml,这两个文件都可以被SpringBoot自动识别并加载,但是如果是自定义的配置文件,就最好还是使用properties格式的文件,因为SpringBoot中暂时还并未提供手动加载yml格式文件的功能(这里指注解方式)。
application.properties配置文件欲被SpringBoot自动加载,需要放置到指定的位置:src/main/resource目录下,一般自定义的配置文件也位于此目录之下。自定义的xxx.properties配置文件是不会被SpringBoot自动加载的,需要手动去进行加载,这里的手动加载一般指的是注解的方式加载,加载自定义属性文件的注解:@PropertySource("classpath:xxx.properties"),代码样例如下:
- 配置文件:xxx.properties
#map 第一种方式
data.mapParam.name=zhangsan
data.mapParam.sex=man
data.mapParam.age=11
#map 第二种方式
data.mapParam[name]=zhangsan
data.mapParam[sex]=man
data.mapParam[age]=11
#list 第一种方式
data.listParam[0]=apple0
data.listParam[1]=apple1
data.listParam[2]=apple2
#list 第二种方式
data.listParam=apple0,apple1,apple2
- 读取配置文件的类
@Component
@PropertySource(value = "classpath:xxx.properties")
@ConfigurationProperties(prefix = "data")
public class PropertiesParam{
private List<String> listParam = new ArrayList<>();
private Map<String, String> mapParam= new HashMap<>();
public List<String> getListParam() {
return listParam;
}
public void setListParam(List<String> listParam) {
this.listParam = listParam;
}
public Map<String, String> getMapParam() {
return mapParam;
}
public void setMapParam(Map<String, String> mapParam) {
this.mapParam = mapParam;
}
}
- 在其他类中可以通过
注入的方式使用@Autowired
@Service
public class SomeService {
@Autowired
private PropertiesParam propertiesParam;
public void init() {
propertiesParam.getMapParams();
propertiesParam.getListParams();
}
}
二、map、list的组合类型参数配置
基于上面读取配置模式,我们甚至可以配置类型更为复杂的参数,比如:List<Map> Map<String,List> 等复杂类型的参数,以List<Map> 类型为例:
- 配置文件
data.tool.[0].name=zhangsan
data.tool.[0].age=20
data.tool.[0].slim=chzhang
data.tool.[1].name=lishi
data.tool.[1].age=18
data.tool.[1].slim=aachzhang
- 读取配置文件的类
@Component
@ConfigurationProperties(prefix = "data")
@PropertySource(value = "classpath:xxx.properties")
public class TestConfig {
private List<Map<String, String>> tool = new ArrayList<>();
public List<Map<String, String>> getTool() {
return tool;
}
public void setTool(List<Map<String, String>> tool) {
this.tool = tool;
}
}
其他复杂类型的参数配置大同小异,注意配置文件"xxx.properties" 参数的正确配置以及读取参数属性的类型一致。
补:工具类获取配置文件参数另一个办法
@SuppressWarnings("all")
@Slf4j
@Component
public class MdmUtils {
private static String APNS_CONFIG;
@Value("${iosmdm.params.apns_config}")
public void setApnsConfig(String apnsConfig) {//注意,set方法中的static要去掉
APNS_CONFIG = apnsConfig;
}
}