学透Spring Boot — 007. 七种配置方式及优先级

Spring Boot 提供很多种方式来加载配置,本文我们会用Tomcat的端口号作为例子,演示Spring Boot 常见的配置方式。

几种配置方式

使用默认配置

新建一个项目什么都不配置,Spring Boot会自动配置Tomcat端口号。
启动日志

TomcatWebServer  : Tomcat initialized with port 8080 (http)

TODO:以后会写一篇关于如何自动配置Tomcat的文章。

通过SpringApplication类

我们可以稍微修改一下我们的启动类

@SpringBootApplication
public class JoeLabApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(JoeLabApplication.class);
        app.setDefaultProperties(Map.of("server.port", 9001));
        app.run(args);
    }
}

启动后,通过日志可以看到端口号已经变成9001.

TomcatWebServer  : Tomcat started on port 9001 (http) with context path '/'
通过配置文件application.yaml

我们在application.yaml中配置,这也是我们比较常用的方式

server:
  port: 9002

重启服务,可以看到端口已经变成了9002了

TomcatWebServer  : Tomcat started on port 9002 (http) with context path '/'
通过application.properties

有些开发比较习惯在属性配置文件中配置SpringBoot,也是可以的

server.port=9003

重启服务,可以看到端口号已经变成了9003

TomcatWebServer  : Tomcat started on port 9003 (http) with context path '/'
通过系统环境变量

启动参数中配置环境变量,也是比较常见的一种方式
在这里插入图片描述
重启服务,可以看到端口号已经变成了9004

TomcatWebServer  : Tomcat started on port 9004 (http) with context path '/'
通过JVM参数

我们可以配置VM参数(用-D开头)
在这里插入图片描述
重启服务,可以看到端口号已经变成了9005

TomcatWebServer  : Tomcat started on port 9005 (http) with context path '/'
通过命令行参数

我们用java 命令启动jar时,也可以传递参数,在IDEA中我们是这么设置的
在这里插入图片描述
重启服务,可以看到端口号已经变成了9006

TomcatWebServer  : Tomcat started on port 9006 (http) with context path '/'

配置优先级顺序

前面我们了解了几种最常用的配置方式,那如果同时配置了几种,那么那些优先级会更高呢?
我们从低到高对它们进行排序:

  1. 默认配置
  2. 通过SpringApplication类
  3. 通过配置文件application.yaml
  4. 通过配置文件application.properties
  5. 通过系统环境变量
  6. 通过JVM参数
  7. 通过命令行参数

也就是说命令行的参数配置是优先级是最高的,只要它配置了,Spring Boot就用它覆盖其它配置。默认配置优先级是最低的,只有其它几种都没有配置时,才会使用默认配置。

特别说明:虽然application.yaml和application.properties都可以配置,但不建议项目中同时用两种。因为有时我们忘记了优先级,导致可能遇到意想不到的问题。

profile 配置文件

除了application.properties和application.yaml这两种配置,有时后我们需要对不同的环境设置不同的配置,这时候我们要用profile来单独定制某套环境。
比如我们新增一套配置 application-dev.properties

server.port=9007

然后application.properties的配置如下

server.port=9003
spring.profiles.active=dev

重启服务,我们可以看到用的是9007,表示profile的优先级更高!

TomcatWebServer  : Tomcat started on port 9007 (http) with context path '/'

JSON 格式的配置

刚才我们在环境变量中设置的是key-value结构,类似properties
在这里插入图片描述
我们能不能在环境变量中使用json格式呢?答案当然是可以
在这里插入图片描述

默认加载路径

我们都知道,SpringBoot会在resources目录下找application.properties, 这是它的默认行为。其实它还会项目根目录下的config文件夹,也是它默认的搜索路径。
我们测试一下
resources/application.properties

server.port=9003
spring.profiles.active=dev

然后在根目录下的config/application-dev.properties

server.port=9007

启动应用,发现用的是9007。这也验证了config目录也是默认的加载路径。

如果你不喜欢application.properties,你也可以修改主配置文件名。
在这里插入图片描述
resources/hello.properties

server.port=9003
spring.profiles.active=dev

config/hello-dev.properties

server.port=9010

不过一般没人吃饱饭了去这么干!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值