springboot中解析yml文件

springboot中解析yml文件

springboot集成log4j2时,需要将操作日志记录到数据源。这需要自己编写数据源连接信息。如下:

不太优雅,数据源是在配置文件中是有配置,可是这里又需要配置一次,而且后期切换环境给运维也增加挑战。

怎么从配置文件获取参数呢?甚至直接从容器中提取数据源?

@Value? @Autowired? getBean("dataSource")?

nonono!!!

这很蛋疼了。springboot启动时最开始就需要加载日志配置中的数据源信息,可是这时候spring所有的bean都还未加载,也无法通过任何方式在spring容器中获取参数配置。

咋搞?小弟不才,通过硬写解析yml配置文件的方法获取配置文件中的数据源配置信息。

添加依赖

<dependency>
   <groupId>com.fasterxml.jackson.dataformat</groupId>
   <artifactId>jackson-dataformat-yaml</artifactId>
   <version>2.11.2</version>
</dependency>

新增工具类

import org.springframework.util.ResourceUtils;
import org.yaml.snakeyaml.Yaml;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.util.Map;

public class YmlUtil {


   public static Map<String,Object> getYaml(String filePath){
      Yaml yml = new Yaml();
      Reader reader = null;
      try {
//       String filePath = ResourceUtils.getURL("classpath:").getPath() + "/application.yml";
         reader = new FileReader(new File(filePath));
      } catch (Exception e) {
         // TODO: handle exception
         e.printStackTrace();
      }
      return yml.loadAs(reader, Map.class);
   }

   public static Object getPropValue(Map<String,Object> map,String key){
      Map<String,Object> temp = map;
      int length = key.split("\\.").length;
      for (int i = 0; i < length; i++) {
         if(i==length-1){
            //叶子节点直接获取
            return temp.get(key.split("\\.")[i]);
         }else{
            temp = (Map<String, Object>)temp.get(key.split("\\.")[i]);
         }
      }
      return null;
   }

//使用方法
   public static void main(String[] args) {
      try{
         Map<String,Object> map = getYaml(ResourceUtils.getURL("classpath:").getPath() + "/application.yml");
         Object val = getPropValue(map,"spring.profiles.active");
      }catch (Exception e){

      }
   }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值