一、本文介绍:
本文主要通过完整代码的形式,展示如何加载自定义配置文件中的配置项数据,并进行使用。以及如何区分内外部配置文件的加载。同时,又介绍了如何修改内存中的配置,并输出到配置文件中进行持久化保存的方法。
本文基于的环境:Idea2022.2.5(社区版)、JDK1.8、spring-boot-starter-parent 2.6.0
注意:本文介绍内容少,主要信息都在代码的注释里。

二、加载配置:
先假设有两个配置文件(注意文件的编码格式要弄成UTF-8,以支持中文)。
IDEA中调整:IDEA File -> Settings -> Editor -> File Encodings -> Properties Files default encoding for properties files 需要设置为 UTF-8
内部配置文件(放在resources底下):
外部配置文件(放在项目文件夹之外的一处地方):
期望:
①项目打包时,会把【内部配置文件】打包进jar包中。同时,默认情况下,会自动加载【内部配置文件】。
②如果有配置【外部配置文件】路径,则会去加载【外部配置文件】数据,否则不加载。
③【外部配置文件】中,凡是出现的项,优先级更高,将覆盖【内部配置文件】的相同key的配置项。
④允许利用【外部配置文件】只替换【内部配置文件】中的部分配置项。
则可见配置加载类源码(CustomConfig.java):
不加载外部配置时:

可以看到把内部配置文件中的数据加载出来了。

加载外部配置时:

可以看到,因为外部配置文件中也配置了name,所以name被替换成外部配置文件中的配置值。但是age在外部配置文件中没有对应配置项,所以age依旧使用的是内部配置文件中的配置值。


三、修改配置并输出到配置文件:
注:没有确切需求的话,不需要考虑这个实现,有一定的局限性。
局限性:
①实际加载的是内部配置文件的话,不能用这个方法。IDE中执行时,修改的其实是这个文件夹里的对应配置文件 /target/classes/。如果是打包后执行jar包,因为内部配置文件在jar包里,所以更新的内容不能输出到内部配置文件。
②每次输出到配置文件(实际只会是外部配置文件),只能把当下内存中的配置信息全部输出,且会覆盖掉原文件的全部内容。(但是这个应该可以自行调整改造代码来优化)
期望:
①需要尽量保证内存中的配置和文件的配置是一致的。即要改就全改,不然就都不改。(提供的源码可以自行再优化,使之更健壮)
②修改配置后,无论是读取内存中的配置,还是配置文件中的配置,都是更新后的配置。
③支持中文配置值的输出(即不会变成乱码)
由此,得到源码(直接放在刚刚的CustomConfig.java文件中就行):
开始测试。
不加载外部配置文件时:

前面有提及,由于不能输出到内部配置文件中,所以这里直接拒绝修改。并且为了保持一致,所以修改的内容无效,内存中的配置依旧是修改前的。

加载外部配置文件时:

因为新的配置内容可以输出到外部配置文件,所以修改配置是成功的。且内存中和外部配置文件中,都是新的配置值。

注意,输出配置到配置文件中,整个文件的内容都会更新。
设置的comments,若有中文会变成 这 之类,没招,除非自己继承Properties去实现输出方法,特别是这个方法writeComments。
变化后的配置文件内容,第一行是自定义输入的comments注释,第二行是Properties内部实现的输出注释(表示输出内容的时间),第三行开始就是输出的配置对。

版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/3801.html