boot启动后,读取相关配置文件
boot 有很多读取配置得方法
像使用 @Component @Value 组合
使用@ConfigurationProperties 也能取到
但是这样取值存在一个弊端 每次加配置 都需要改动我们得取值实体
这样不仅不灵活 而且一旦弄错了 就可能读取不到配置了
今天提供一个 自动遍历配置得方法 这样我们只需要取想要得配置就可以了
首先 既然事遍历配置 那肯定是在项目启动之后了 加载他所有得配置
需要一个类 来实现 ApplicationRunner 这个接口 这样 项目启动后 就会调用里面重写得run方法 来进行一些操作
public class ApplicationRunnerImpl implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
//TODO some thing
}
}
这里写一些自己需要得逻辑即可 今天是读取配置
遍历配置 所以 @Value @ConfigurationProperties 就使用不到了
今天用一个新发现得 接口类
Environment
最近需要读取配置文件 而不是写死在代码里边 找到了这个类 非常好用
需要注入一下
@Autowired
private Environment env;
将其注入之后 boot启动后 所有得配置信息都能在这里拿到 当然了 也包括你现在用得电脑配置 等等
这里要做的就是循环取值而已 拿出你需要得配置即可
for (PropertySource<?> source : ((AbstractEnvironment) env).getPropertySources()) {
PropertySource propertySource = source;
//遍历每个配置来源中的配置项
if (propertySource instanceof EnumerablePropertySource) {
for (String name : ((EnumerablePropertySource) propertySource).getPropertyNames()) {
/*
由于每个配置来源可能配置了同一个配置项,存在相互覆盖的情况,为了保证获取到的值与通过@Value获取到的值一致,
需要通过env.getProperty(name)获取配置项的值。
*/
logger.warn("整体配置---name:" + name + ";---value:" + env.getProperty(name));
// spring 配置
if (name.contains("spring.profiles.active") || name.contains("spring.application.name")) {
logger.info("profiles相关配置---name:" + name + ";---value:" + env.getProperty(name));
// redis 配置信息
} else if (name.contains("spring.redis.port") || name.contains("spring.redis.host")) {
logger.info("redis相关配置---name:" + name + ";---value:" + env.getProperty(name));
}
}
}
}
这里看一下打印得日志 配置
这里会先打印电脑得相关配置 什么系统了 java得配置了 还有 启动得pid等等 配置还是挺全得 接着往下看spring得配置
这里就能遍历出spring得配置 包括其他得 我只截取了部分
自定义得也能读取出来 包括配置中心那种得 都有
像代码那样 做一个字符包含 判断他名字 然后取他得value 就行
if (name.contains("spring.profiles.active") || name.contains("spring.application.name")) {
}
这样就完成了配置得遍历 取想要得配置 以及对应得值
大概得步骤就是这些 有需要得可以参考下