当前位置: 首页 > news >正文

学透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

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


http://www.mrgr.cn/news/97047.html

相关文章:

  • 【蓝桥杯】第十五届C++B组省赛
  • MySQL-SQL-DDL语句、表结构创建语句语法、表约束、表数据类型
  • github合并多个commit message以及rebase解决文件冲突
  • 【蓝桥杯】算法笔记2
  • Javaweb后端AOP记录操作日志
  • 蓝桥杯冲刺
  • Springboot学习笔记4.1
  • Apache httpclient okhttp(1)
  • 哈希表+前缀和+滑动窗口高效查找——蓝桥杯例题
  • 3499 幸运数字
  • Unity2D:从零开始制作一款跑酷游戏!
  • 【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法、数据库连接池和 MySQL 开发企业规范
  • 图解AUTOSAR_LINInterface
  • 认识 Promise
  • 算法题(114):矩阵距离
  • 【动态规划】线性dp——LIS和LCS
  • LeeCode 5. 最长回文子串
  • 计算机视觉算法实战——基于YOLOv8的行人流量统计系统
  • ARM------硬件程序开发
  • vue3+ts+element-plus 开发一个页面模块的详细过程