springboot启动后遍历所有配置文件

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));
                        }
                    }
                }
            }

这里看一下打印得日志 配置

springboot启动后遍历所有配置文件_第1张图片
这里会先打印电脑得相关配置 什么系统了 java得配置了 还有 启动得pid等等 配置还是挺全得 接着往下看spring得配置
springboot启动后遍历所有配置文件_第2张图片
这里就能遍历出spring得配置 包括其他得 我只截取了部分
自定义得也能读取出来 包括配置中心那种得 都有

像代码那样 做一个字符包含 判断他名字 然后取他得value 就行

if (name.contains("spring.profiles.active") || name.contains("spring.application.name")) {
}

这样就完成了配置得遍历 取想要得配置 以及对应得值

大概得步骤就是这些 有需要得可以参考下

你可能感兴趣的:(java)