properties mysql转义_Java去除properties文件转义符号

今天因为工作需要碰到个问题,springboot的配置文件application.properties里边的参数需要进行加密,利用Jasypt进行加密。但是因为每次发测试版本都要挨个参数加密比较麻烦,所以写了一个可执行jar文件直接自动进行参数加密,从application.properties文件中读取参数,如果没有加密就进行自动加密并重新写回文件中。但是有一个问题,加密完成后写回到文件时长度填充的“=”号会被转义成“\=”,所以就变成了如下形式:

e15c0b8b0eb548e22e12f99ed8305227.png

然后就在项目中应用就不对了(当然了最后证明不是因为转义字符的问题,其实是数据库的问题,但我还是想了一下怎么去除properties文件的转义符号)。为了能正常使用,看了下Properties类的代码,发现Properties类对一些字符做了转义处理,像 ‘\t’,’\n’,’\r’,’\f’等。如下所示:

16567741d3639cc84f7864ac7514ee11.png

解决方法:

自己写个简单的解析,将“=”的转义去掉。

因为Properties类是用HashTable存储的,回写的时候是不按顺序的,会导致配置文件顺序发生变化,所以自己写了一个OrderedProperties类,继承了Properties,以链表形式顺序存储,所以在OrderedProperties类里边在saveConvert方法里排除掉“=”的转义。如下所示:

8e62038d3ca96b1107717ca5ed218ce7.png

对比上文就知道这里将“=”的转义符号给去掉了,这样用OrderedProperties回写的参数中“=”就不会再被转义成“\=”了。最后的结果如下:

0395475fc85f7a992e68c4ec70fc888c.png

可以看到没有转义的“\”了。

之所以把这件事记下来,一是因为记录下自己的排查过程和解决思路,另外是听人说起的,有同事正则表达式里面希望匹配绝对的’\.’,而经过Properties类转义之后变成了’.’,意义就变成了“任意字符”,由于运行并不报错,而且某系情况下结果还是正确的,防止这种潜在的bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值