一、解析PROPERTIES和XML
- 这里使用了
FileSystemResource
,spring的Resource
继承于InputStreamSource
,也就是spring封装了InputStreamSource
;可以从spring源码看到除了FileSystemResource
还有其他的实现,比如可以不用绝对路径用ClassPath
,对应的实现类就是ClassPathResource
。
/***
* 解析Properties 、xml
* */
public static void loadProperties(){
// 第一种
Properties props = new Properties();
//查找配置文件的属性 并且都合并到props
FileSystemResource location = new FileSystemResource(new File("F:\\work\\unknown\\unknown-admin\\config\\application.properties"));
try {
PropertiesLoaderUtils.fillProperties(props, new EncodedResource(location, (String) null));
System.out.println(props.getProperty("zookeeper.address"));
} catch (IOException e) {
e.printStackTrace();
}
//第二种 spring boot的
try {
List<PropertySource<?>> propertySourceList = new PropertiesPropertySourceLoader().load("app",new FileSystemResource("F:\\work\\unknown\\unknown-admin\\config\\application.properties"));
System.out.println(propertySourceList.get(0).getProperty("zookeeper.address"));
} catch (IOException e) {
e.printStackTrace();
}
}
- 这里我就使用的
ClassPathResource
实现,根据自己实际情况选择用哪个具体实现。
/***
* 目前从源码中找到的读取yml、yaml文件的两种方式
* */
public static void loadYml(){
// 第一种 spring boot解析yml
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
//yaml.setResources(new FileSystemResource("config.yml"));//File引入
yaml.setResources(new ClassPathResource("/application-dev.yml"));//classPath引入
System.out.println(yaml.getObject().get("spring.data.mongodb.uri"));
//第二种 YamlPropertySourceLoader
Resource resource = new ClassPathResource("/application-dev.yml");
//List<Map<String, Object>> loaded = new OriginTrackedYamlLoader(resource).load();
try {
List<PropertySource<?>> propertySourceList = new YamlPropertySourceLoader().load("/application.yml",resource);
System.out.println(propertySourceList.get(0).getProperty("spring.data.mongodb.uri"));
} catch (IOException e) {
e.printStackTrace();
}
}
使用如下.properties为后缀的默认application.properties文件,yml格式文件也同理
一、使用`@ConfigurationProperties`注解将配置文件属性注入到自定义配置对象类中
(1)、首先定义配置对象
(2)、具体使用,运行后将可以得到实体返回数据
二、使用`@Value("${propertyName}")`注解,在需要使用的类中使用成员变量
三、使用Environment,在任何想要用的地方直接获取值
四、通过注册监听器(`Listeners`) + `PropertiesLoaderUtils`的方式(比较前三种方式,更复杂)
(1)、编写配置文件监听器,用来加载自定义配置文件 ,实现ApplicationListener<ApplicationStartedEvent>
(2)、编写加载配置文件的类
3、修改启动类,注册监听器
4.编写测试类,运行结果如下