SpringBoot中yaml文件的读取和修改

写这篇博客的原因是最近工作中遇到了一个问题,有一个需求是将过期的权限存到数据库中,但是到期时间这个字段又是新加的,然后权限过期表也是新建的表,所以分析了一波,决定第一次把直到昨天过期的权限存入到数据库中,然后写个定时任务,每天执行一次,将昨天到期的权限存入数据库。问题就来了,第一次将过期的权限存到数据库有两种方法,一个是写sql脚本,直接在数据库存;第二个是让这个存储方法只执行一次,所以就出现了今天的这篇博客,之前我想的方法是定义一个全局变量,然后执行完这个方法之后,就改变变量,下次就不让它执行了;
但是这个方法很明显不行,因为要是重启项目,这个变量就毫无意义了。然后就想着在yml文件中定义一个变量,然后读取这个变量,执行完添加方法之后就改变变量(因为公司用的是SpringBoot,所以就没有关于xml这里就不提了)
接下来上代码:

这是修改yaml文件的方法,我是在测试类中实验的,亲测有效哦

 @Test
    public void updateYaml(){
        try {
            URL url = Test.class.getClassLoader().getResource("application.yml");
            DumperOptions dumperOptions = new DumperOptions();
            dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
            dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);
            dumperOptions.setPrettyFlow(false);
            Yaml yaml = new Yaml(dumperOptions);
            Map map =(Map)yaml.load(new FileInputStream(url.getFile()));
            System.out.println("这是修改前:"+map.get("isOne"));
            map.put("isOne",false);
            yaml.dump(map, new OutputStreamWriter(new FileOutputStream(url.getFile())));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

这个地方注意一下,我用的Map方式来接的值,你也可以用Json也可以或者Object
然后在修改之前的时候要先读取

 Map map =(Map)yaml.load(new FileInputStream(url.getFile()));

就是这一句,读取yaml文件的内容,这个map中的isOne是我在yaml文件中定义的变量

isOne :true

就是这样直接定义的
然后修改的主要方法是

  yaml.dump(map, new OutputStreamWriter(new FileOutputStream(url.getFile())));

yaml的dump方法,但是有一个问题,你要先定义yaml中的格式

    		DumperOptions dumperOptions = new DumperOptions();
            dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
            dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);
            dumperOptions.setPrettyFlow(false);
            Yaml yaml = new Yaml(dumperOptions);

要是你直接Yaml yaml= new Yaml();
这样的话就不能调用dump方法了

然后读取yaml中的内容

  @Test
    public void getIsOne(){
        try {
            Yaml yaml = new Yaml();
            URL url = Test.class.getClassLoader().getResource("application.yml");
            if (url != null) {
                //获取test.yaml文件中的配置数据,然后转换为obj,
                Object obj =yaml.load(new FileInputStream(url.getFile()));
                System.out.println(obj);
                //也可以将值转换为Map
                Map map =(Map)yaml.load(new FileInputStream(url.getFile()));
                System.out.println(map.get("isOne"));
                //通过map我们取值就可以了.

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

其中主要的就是yaml的load方法,url方法是找到你的yml文件的位置
有指正的地方欢迎讨论。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值