赞
踩
首先,当我们创建一个 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. 启动命令行指定。
(环境变量和系统属性这两个是啥,不是本文范围,可看我其他文章,会写的,环境变量的范围大于系统属性)
系统环境变量中配置spring.config.location 属性即可
例如,现在在 resources 目录下创建一个 javaboy 目录,目录中存放一个 application.properties 文件,那么正常情况下,当我们启动 Spring Boot 项目时,这个配置文件是不会被自动加载的。我们可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。
此时启动项目,就会发现,项目以 classpath:/javaboy/application.propertie 这个路径的配置文件启动。
如果项目已经打包成 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. 启动命令行指定。
系统环境变量中配置spring.config.name 属性即可
举个列子:
首先我们在 resources 目录下创建一个 app.properties 文件,然后在 IDEA 中指定配置文件的文件名:
指定完配置文件名之后,再次启动项目,此时系统会自动去默认的四个位置下面分别查找名为 app.properties 的配置文件。当然,允许自定义文件名的配置文件不放在四个默认位置,而是放在自定义目录下,此时就需要明确指定 spring.config.location 。
$ 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。