推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Spring Boot 分离配置文件的 N 种方式

   2023-08-07 网络整理佚名2480
核心提示:.yaml,默认的加载位置一共有五个,五个位置可以分为两类:目录下的配置文件不会被加载,因为不是直接子文件夹。表示如果这个配置文件不存在,则按照默认的方式启动,而不会报错说找不到这个配置文件。默认的配置文件查找策略,又想加入自己的,那么可以按照如下方式指定配置文件位置:的配置,我想将之放在两个不同的文件夹中以便于管理,像下面这样:格式的配置文件导入,方式如下:

问题并不难,解决方案也有很多,所以我决定写一篇文章来详细谈谈这个问题。

1.配置文件位置

首先朋友们应该明白,Boot默认加载的配置文件是. 或 .yaml。 默认加载位置有五个,可以分为两类:

从下载来看,这又细分为两种:

直接读取下面的配置文件,对应Boot工程,就是​​该目录下的配置。

读取://目录下的文件,对应Boot工程中/目录下的配置。

这两种情况如下:

从项目所在的当前目录加载,这又细分为三种情况:

从项目的当前目录加载配置文件。

从项目当前目录下的文件夹加载配置文件。

从项目当前目录下的文件夹的子文件夹加载(不允许使用孙文件夹)。

这三种情况如下:

可以加载该目录下的配置文件,也可以加载/a目录下的配置文件,但/a/b目录下的配置文件不会被加载,因为它们不是直接子文件夹。

配置文件可以放置在许多不同的位置。 如果多个配置文件中写入相同的属性,则后面加载的配置会覆盖前面的配置。 例如,将:.yaml中的项目端口号设置为8080,将项目当前目录//a/.yaml中的项目端口号设置为8081,则最终项目端口号为8081。

这是默认文件位置。

如果您不希望您的配置文件被调用。 或者 .yaml ,也可以自定义配置文件名,只需在项目启动时指定配置文件名即可,比如我想将我的配置文件名设置为 app.yaml ,那么我们在启动时可以进行如下配置jar包。 这时系统会自动去上面提到的五个位置寻找对应的配置文件:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.name=app
复制代码

如果项目已经打包成jar包并启动,则上述目录中,后三位中的项目当前目录指的是jar包所在目录。

如果不想在这五个位置搜索,也可以在启动jar包时显式指定配置文件的位置和名称,如下:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.location=optional:classpath:/app.yaml
复制代码

注意我前面加了:,表示如果配置文件不存在,会以默认的方式启动,不会报错说找不到配置文件。 如果不加这个前缀,当系统找不到指定的配置文件时,就会抛出异常,从而导致应用程序无法启动。

如果配置文件和jar包在同一个目录结构中,如下图:

那么启动脚本如下:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.location=optional:javaboy/app.yaml
复制代码

如果..的配置只指定目录,则必须以/结尾。 例如上面的启动脚本也可以这样启动:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.location=optional:javaboy/ --spring.config.name=app
复制代码

配置文件的位置由..属性锁定,配置文件的文件名由..name属性锁定。

2. 增设职位

之前关于配置文件位置的设置是为了覆盖现有的配置。 如果不想覆盖Boot默认的配置文件搜索策略,又想添加自己的,可以指定配置文件的位置,如下:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.additional-location=optional:javaboy/app.yaml
复制代码

如果本次额外指定的配置文件与已有的配置文件冲突,则以已有的配置文件为准。

3. 位置通配符

有一种情况,假设我有redis和mysql配置,我想把它放在两个不同的文件夹中,以便于管理,像这样:

然后项目启动时,可以通过通配符*批量扫描对应的文件夹:

java -jar boot_config_file-0.0.1-SNAPSHOT.jar --spring.config.location=optional:config结尾,即目录的最后部分可以不确定。

4.导入外部配置

从Boot2.4开始,我们还可以使用..方法导入配置文件。 与-相比,这种导入更加灵活,可以导入任意名称的配置文件。

spring.config.import=optional:file:./dev.properties
复制代码

甚至,这个..还可以导入一个不带扩展名的配置文件。 例如,我有一个格式为的配置文件,但是这个配置文件没有扩展名。 现在我想将其导入为配置文件,格式如下:

spring.config.import=optional:file:/Users/sang/dev[.properties]
复制代码

好了,看完上面的内容,文章开头的问题的答案就不用多说了~

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
Powered By DESTOON