Spring Boot 之配置文件 application.properties位置(一)

Spring Boot 很多东西都是通过配置完成,而这个配置文件的位置,你清楚了吗?

一、application.properties默认存放位置

首先,当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件(如果你其他方式搞的项目,没有关系,正好帮你解决不知道放哪里的问题),可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。分别是:
官方定义:

 1. A /config subdirectory of the current directory 
 2. The current directory 
 3. A classpath /config package 
 4. The classpath root

我来解释一哈,这个 current directory 指的就是项目目录,这下就明白了撒,通俗话一点就是:
1. 当前项目根目录下的 config 目录下
2. 当前项目的根目录下
3. resources 目录下的 config 目录下
4. resources目录下

按如上顺序,四个配置文件的优先级依次降低。如下:
在这里插入图片描述
这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。但是,这也不是绝对的,我们也可以在项目启动时自定义配置文件位置。

二、自定义配置文件位置

定义配置文件位置有三种方式,分别是:

1. 在环境变量中指定。
2. 在系统属性中指定。
3. 启动命令行指定。

(环境变量和系统属性这两个是啥,不是本文范围,可看我其他文章,会写的,环境变量的范围大于系统属性

2.1 环境变量中指定

系统环境变量中配置spring.config.location 属性即可

2.2 系统属性中指定

例如,现在在 resources 目录下创建一个 javaboy 目录,目录中存放一个 application.properties 文件,那么正常情况下,当我们启动 Spring Boot 项目时,这个配置文件是不会被自动加载的。我们可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。
在这里插入图片描述
此时启动项目,就会发现,项目以 classpath:/javaboy/application.propertie 这个路径的配置文件启动。

2.3 启动命令行指定

如果项目已经打包成 jar ,在启动命令中加入位置参数即可:
java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/


注意,配置这个自定义配置位置时,配置的顺序,和实际检索的顺序是相反的,如:
配置了的搜索顺序:classpath:/custom-config/,file:./custom-config/,实际的搜索顺序为:
1. file:./custom-config/
2. classpath:custom-config/

上面这个是覆盖默认的配置位置,则以前位置的配置文件不会生效,如果想同时生效,等同于你需要增加几个配置文件位置,而不是替换他的配置文件位置,可以用 spring.config.additional-location,配置方式同上,顺序也是相反的。

三、自定义配置文件名

对于 application.properties 而言,它不一定非要叫 application ,但是项目默认是去加载名为 application 的配置文件,如果我们的配置文件不叫 application ,也是可以的,但是,需要明确指定配置文件的文件名。通过指定环境属性:spring.config.name 来引用显式位置

定义方式和配置文件位置方式基本一致,只是属性名称不同而已
也是三种方式,分别是:

1. 在环境变量中指定。
2. 在系统属性中指定。
3. 启动命令行指定。

3.1 在环境变量中指定

系统环境变量中配置spring.config.name 属性即可

3.2 在系统属性中指定

举个列子:
首先我们在 resources 目录下创建一个 app.properties 文件,然后在 IDEA 中指定配置文件的文件名:
在这里插入图片描述

指定完配置文件名之后,再次启动项目,此时系统会自动去默认的四个位置下面分别查找名为 app.properties 的配置文件。当然,允许自定义文件名的配置文件不放在四个默认位置,而是放在自定义目录下,此时就需要明确指定 spring.config.location 。

3.3 启动命令行指定

$ java -jar myproject.jar --spring.config.name = myproject

总结:

1. 配置文件位置和文件名称可以同时自定义;

2. 如果使用环境变量而不是系统属性,则大多数操作系统不允许使用句点分隔的键名,但可以使用下划线(例如,SPRING_CONFIG_NAME而不是spring.config.name)。

4. 如果应用程序在容器中运行,则可以使用JNDI属性(in java:comp/env)或servlet上下文初始化参数来代替环境变量或系统属性。

JNDI是啥玩意,不属于本文范畴,我会写相应的文章。0_0


版权声明:本文为qq_27721753原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>