一文搞懂SpringBoot的外部化配置

870 阅读3分钟

一般情况springboot项目打包会把应用配置文件一起打包进去。

这样的话我们如果要修改一些配置的话就得重新打包部署。

其实SpringBoot是支持外部化配置的,这样能更方便的来自定义我们的配置。

接下来就让我们来看看怎么使用。

SpringBoot外部化配置

SpringBoot共支持14种外部化配置,可以在SpringBoot官方文档中找到,如下图 image.png 接下来我们就挑几个常用的来进行说明

通过SpringApplication.setDefaultProperties设置

image.png

@PropertySource注解配置

image.png

应用配置文件

就是application.yml和application.properties文件,也包括他们带有后缀表示不同环境下的文件application-{profile}.yml和application-{profile}.properties

注意:如果同时含有相同名称的.yml和.properties应用配置文件,则以properties为准。

系统环境变量

就是配置在/etc/profile文件中的变量。(Linux)

比如我们可以配置一条属性表示当前OS启用什么环境的应用配置文件:SPRING_PROFILE_ACTIVE=test

Java系统变量

也就是-D表示的变量,可以通过System.getProperties()来获取。

-D开头的属性需要放在命令的jar名称之前

如:java -jar -Dtest="hello word" app.jar (放在jar名称之后是不生效的,有空格记得加引号)

命令行

SpringBoot可以解析"--"开头格式的属性(源码:SimpleCommandLineArgsParser#parse)

一般放在jar名称之后

如:java -jar app.jar --spring.profiles.active=test

注意:善于思考的小伙伴看到这肯定会提出一个问题,那就是优先级的问题。

那么上述这些配置方式的优先级是按文档编写顺序,后面的配置会覆盖前面的配置。

自动查找应用配置文件

SpringBoot还有一个功能,会自动在规定路径来查找我们的application.yml配置文件。

我们通常都是把applicaiton.yml文件放在resources目录下,其实还有几种方式:

类路径(classpath)

  1. 第一种就是在我们的类路径根目录下

    注意:类路径不止表示resources目录,也表示根包的目录,但规范我们一般把配置文件和源代码是分开放的,所以可以表示就是放在resouces根目录下。

  2. 也可以放在类路径的/config目录下。

当前目录

表示启动jar包时的当前目录

  1. 就当前目录下
  2. 当前目录的/config目录下
  3. 当前目录的/config目录下的子目录(官网定义,这个其实我也没很理解,如有知晓的同学可以评论告知)

这个自动查找应用配置文件也有优先级,按文档编写顺序,后面的会覆盖前面的配置。

我自己使用的话习惯在部署jar的目录下创建一个config目录,把应用配置文件放进去。

这样就会比较方便的改些数据库配置啊,自定义配置等

好了,今天我们的文章就到这儿了,感谢观看。