当前位置: 首页 > 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

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

相关文章:

  • 用户模块——整合 Spring 缓存(Cacheable)
  • 系统与网络安全------Windows系统安全(7)
  • Deep Learning-Based Human Pose Estimation: A Survey【读到2d单人hpe】
  • Java For 循环全解析:从基础到增强的实战指南
  • Spring Boot项目中策略模式的应用与实现
  • 教程:如何使用 JSON 合并脚本
  • AutoDev Next:IDE 即 AI 编程服务,构建多端粪围编程
  • 接口自动化学习三:参数化parameterize
  • 多品种金融数据高效导入丨DolphinDB 希施玛历史数据自动化导入模块介绍
  • 【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解
  • JVM深入原理(一+二):JVM概述和JVM功能
  • 《解锁Qwen2.5-Omni:AI全模态大模型部署实战指南》
  • 企业出海如何选择全球化软件工具?Websoft9 推荐开源作为理性可行的选择
  • 写给新人的深度学习扫盲贴:向量与矩阵
  • DayDreamer: World Models forPhysical Robot Learning
  • 基于图扑 HT 技术的电缆厂 3D 可视化管控系统深度解析
  • 第3期 基于改进YOLOv8的卫星下的船舰检测算法与系统实现
  • STM32平衡车开发实战教程:从零基础到项目精通
  • 顺序容器 -forward list单链表
  • YOLO系列
  • 建设网站前的市场分析包括哪些内容/怎么做市场推广
  • 网站首页空白 wordpress/游戏代理平台
  • 玄天教学网站建设/互联网营销师课程
  • vb.net做网站/如何创建一个平台
  • 网站建设 开票税率/足球比赛直播2021欧冠决赛
  • 做贸易的都有什么网站/广州seo站内优化