使用SpringBoot配置信息修改服务器配置

article/2025/9/12 2:41:40

SpringBoot

🍌 掌握基于SpringBoot框架的程序开发步骤

今日目标:

  • 熟练使用SpringBoot配置信息修改服务器配置

1 配置文件

1.1 配置文件格式

我们现在启动服务器默认的端口号是 8080,访问路径可以书写为

http://localhost:8080/books/1

在线上环境我们还是希望将端口号改为 80,这样在访问的时候就可以不写端口号了,如下

http://localhost/books/1

SpringBoot 程序如何修改呢?SpringBoot 提供了多种属性配置方式

  • application.properties

    server.port=80
    
  • application.yml

    server:port: 81
    
  • application.yaml

    server:port: 82
    

注意:SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。

1.1.1 环境准备

创建一个新工程 springboot_02_base_config 用来演示不同的配置文件,工程环境和入门案例一模一样,结构如下:

在这里插入图片描述

在该工程中的 com.itheima.controller 包下创建一个名为 BookController 的控制器。内容如下:

@RestController
@RequestMapping("/books")
public class BookController {@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println("id ==> "+id);return "hello , spring boot!";}
}

1.1.2 不同配置文件演示

  • application.properties配置文件

现在需要进行配置,配合文件必须放在 resources 目录下,而该目录下有一个名为 application.properties 的配置文件,我们就可以在该配置文件中修改端口号,在该配置文件中书写 portIdea 就会提示,如下

在这里插入图片描述

application.properties 配置文件内容如下:

server.port=80

启动服务,会在控制台打印出日志信息,从日志信息中可以看到绑定的端口号已经修改了

在这里插入图片描述

  • application.yml配置文件

删除 application.properties 配置文件中的内容。在 resources 下创建一个名为 application.yml 的配置文件,在该文件中书写端口号的配置项,格式如下:

server:port: 81

注意: 在:后,数据前一定要加空格。

而在 yml 配置文件中也是有提示功能的,我们也可以在该文件中书写 port ,然后 idea 就会提示并书写成上面的格式

在这里插入图片描述

启动服务,可以在控制台看到绑定的端口号是 81

在这里插入图片描述

  • application.yaml配置文件

删除 application.yml 配置文件和 application.properties 配置文件内容,然后在 resources 下创建名为 application.yaml 的配置文件,配置内容和后缀名为 yml 的配置文件中的内容相同,只是使用了不同的后缀名而已

application.yaml 配置文件内容如下:

server:port: 83

启动服务,在控制台可以看到绑定的端口号

在这里插入图片描述

注意:在配合文件中如果没有提示,可以使用一下方式解决

  • 点击 File 选中 Project Structure

在这里插入图片描述

  • 弹出如下窗口,按图中标记红框进行选择

在这里插入图片描述

  • 通过上述操作,会弹出如下窗口

在这里插入图片描述

  • 点击上图的 + 号,弹出选择该模块的配置文件

在这里插入图片描述

  • 通过上述几步后,就可以看到如下界面。properties 类型的配合文件有一个,ymal 类型的配置文件有两个

在这里插入图片描述

1.1.3 三种配合文件的优先级

在三种配合文件中分别配置不同的端口号,启动服务查看绑定的端口号。用这种方式就可以看到哪个配置文件的优先级更高一些

application.properties 文件内容如下:

server.port=80

application.yml 文件内容如下:

server:port: 81

application.yaml 文件内容如下:

server:port: 82

启动服务,在控制台可以看到使用的端口号是 80。说明 application.properties 的优先级最高

注释掉 application.properties 配置文件内容。再次启动服务,在控制台可以看到使用的端口号是 81,说明 application.yml 配置文件为第二优先级。

从上述的验证结果可以确定三种配置文件的优先级是:

application.properties > application.yml > application.yaml

注意:

  • SpringBoot 核心配置文件名为 application

  • SpringBoot 内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性

    例如要设置日志的级别时,可以在配置文件中书写 logging,就会提示出来。配置内容如下

    logging:level:root: info
    

1.2 yaml格式

上面讲了三种不同类型的配置文件,而 properties 类型的配合文件之前我们学习过,接下来我们重点学习 yaml 类型的配置文件。

**YAML(YAML Ain’t Markup Language),一种数据序列化格式。**这种格式的配置文件在近些年已经占有主导地位,那么这种配置文件和前期使用的配置文件是有一些优势的,我们先看之前使用的配置文件。

最开始我们使用的是 xml ,格式如下:

<enterprise><name>itcast</name><age>16</age><tel>4006184000</tel>
</enterprise>

properties 类型的配置文件如下

enterprise.name=itcast
enterprise.age=16
enterprise.tel=4006184000

yaml 类型的配置文件内容如下

enterprise:name: itcastage: 16tel: 4006184000

优点:

  • 容易阅读

    yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰

  • 容易与脚本语言交互

  • 以数据为核心,重数据轻格式

    yaml 更注重数据,而 xml 更注重格式

YAML 文件扩展名:

  • .yml (主流)
  • .yaml

上面两种后缀名都可以,以后使用更多的还是 yml 的。

1.2.1 语法规则

  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

    空格的个数并不重要,只要保证同层级的左侧对齐即可。

  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • # 表示注释

核心规则:数据前面要加空格与冒号隔开

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔,例如

enterprise:name: itcastage: 16tel: 4006184000subject:- Java- 前端- 大数据

1.3 yaml配置文件数据读取

1.3.1 环境准备

新创建一个名为 springboot_03_read_dataSpringBoot 工程,目录结构如下

在这里插入图片描述

com.itheima.controller 包写创建名为 BookController 的控制器,内容如下

@RestController
@RequestMapping("/books")
public class BookController {@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println("id ==> "+id);return "hello , spring boot!";}
}

com.itheima.domain 包下创建一个名为 Enterprise 的实体类等会用来封装数据,内容如下

public class Enterprise {private String name;private int age;private String tel;private String[] subject;//setter and getter//toString
}

resources 下创建一个名为 application.yml 的配置文件,里面配置了不同的数据,内容如下

lesson: SpringBootserver:port: 80enterprise:name: itcastage: 16tel: 4006184000subject:- Java- 前端- 大数据

1.3.2 读取配置数据

1.3.2.1 使用 @Value注解

使用 @Value("表达式") 注解可以从配合文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名……}

我们可以在 BookController 中使用 @Value 注解读取配合文件数据,如下

@RestController
@RequestMapping("/books")
public class BookController {@Value("${lesson}")private String lesson;@Value("${server.port}")private Integer port;@Value("${enterprise.subject[0]}")private String subject_00;@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println(lesson);System.out.println(port);System.out.println(subject_00);return "hello , spring boot!";}
}
1.3.2.2 Environment对象

上面方式读取到的数据特别零散,SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。具体代码如下:

@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate Environment env;@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println(env.getProperty("lesson"));System.out.println(env.getProperty("enterprise.name"));System.out.println(env.getProperty("enterprise.subject[0]"));return "hello , spring boot!";}
}

注意:这种方式,框架内容大量数据,而在开发中我们很少使用。

1.3.2.3 自定义对象

SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:

  • 将实体类 bean 的创建交给 Spring 管理。

    在类上添加 @Component 注解

  • 使用 @ConfigurationProperties 注解表示加载配置文件

    在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据

  • BookController 中进行注入

具体代码如下:

Enterprise 实体类内容如下:

@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {private String name;private int age;private String tel;private String[] subject;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String[] getSubject() {return subject;}public void setSubject(String[] subject) {this.subject = subject;}@Overridepublic String toString() {return "Enterprise{" +"name='" + name + '\'' +", age=" + age +", tel='" + tel + '\'' +", subject=" + Arrays.toString(subject) +'}';}
}

BookController 内容如下:

@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate Enterprise enterprise;@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println(enterprise.getName());System.out.println(enterprise.getAge());System.out.println(enterprise.getSubject());System.out.println(enterprise.getTel());System.out.println(enterprise.getSubject()[0]);return "hello , spring boot!";}
}

注意:

使用第三种方式,在实体类上有如下警告提示

在这里插入图片描述

这个警告提示解决是在 pom.xml 中添加如下依赖即可

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

1.4 多环境配置

以后在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。

在这里插入图片描述

来回的修改配置会很麻烦,而 SpringBoot 给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境开发的配置都不相同,接下来对不同类型的配置文件进行说明

1.4.1 yaml文件

application.yml 中使用 --- 来分割不同的配置,内容如下

#开发
spring:profiles: dev #给开发环境起的名字
server:port: 80
---
#生产
spring:profiles: pro #给生产环境起的名字
server:port: 81
---
#测试
spring:profiles: test #给测试环境起的名字
server:port: 82
---

上面配置中 spring.profiles 是用来给不同的配置起名字的。而如何告知 SpringBoot 使用哪段配置呢?可以使用如下配置来启用都一段配置

#设置启用的环境
spring:profiles:active: dev  #表示使用的是开发环境的配置

综上所述,application.yml 配置文件内容如下

#设置启用的环境
spring:profiles:active: dev---
#开发
spring:profiles: dev
server:port: 80
---
#生产
spring:profiles: pro
server:port: 81
---
#测试
spring:profiles: test
server:port: 82
---

注意:

在上面配置中给不同配置起名字的 spring.profiles 配置项已经过时。最新用来起名字的配置项是

#开发
spring:config:activate:on-profile: dev

1.4.2 properties文件

properties 类型的配置文件配置多环境需要定义不同的配置文件

  • application-dev.properties 是开发环境的配置文件。我们在该文件中配置端口号为 80

    server.port=80
    
  • application-test.properties 是测试环境的配置文件。我们在该文件中配置端口号为 81

    server.port=81
    
  • application-pro.properties 是生产环境的配置文件。我们在该文件中配置端口号为 82

    server.port=82
    

SpringBoot 只会默认加载名为 application.properties 的配置文件,所以需要在 application.properties 配置文件中设置启用哪个配置文件,配置如下:

spring.profiles.active=pro

1.4.3 命令行启动参数设置

使用 SpringBoot 开发的程序以后都是打成 jar 包,通过 java -jar xxx.jar 的方式启动服务的。那么就存在一个问题,如何切换环境呢?因为配置文件打到的jar包中了。

我们知道 jar 包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成jar包就可以了。这种方式显然有点麻烦,而 SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式,如下

java –jar xxx.jar –-spring.profiles.active=test

那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式

java –jar xxx.jar –-server.port=88

当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下

java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test

大家进行测试后就会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实 SpringBoot 官网已经进行了说明,参见 :

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

进入上面网站后会看到如下页面

在这里插入图片描述

如果使用了多种方式配合同一个配置项,优先级高的生效。

1.5 配置文件分类

在这里插入图片描述

有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,如下

java –jar springboot.jar –-spring.profiles.active=test --server.port=85 --server.servlet.context-path=/heima --server.tomcat.connection-timeout=-1 …… …… …… …… ……

针对这种情况,SpringBoot 定义了配置文件不同的放置的位置;而放在不同位置的优先级时不同的。

SpringBoot 中4级配置文件放置位置:

  • 1级:classpath:application.yml
  • 2级:classpath:config/application.yml
  • 3级:file :application.yml
  • 4级:file :config/application.yml

==说明:==级别越高优先级越高

1.5.1 代码演示

在这里我们只演示不同级别配置文件放置位置的优先级。

1.5.1.1 环境准备

创建一个名为 springboot_06_config_fileSpringBoot 工程,目录结构如下

在这里插入图片描述

resources 下创建一个名为 config 的目录,在该目录中创建 application.yml 配置文件,而在该配置文件中将端口号设置为 81,内容如下

server:port: 81

而在 resources 下创建的 application.yml 配置文件中并将端口号设置为 80,内容如下

server:port: 80
1.5.1.2 验证1级和2级的优先级

运行启动引导类,可以在控制台看到如下日志信息

在这里插入图片描述

通过这个结果可以得出类路径下的 config 下的配置文件优先于类路径下的配置文件。

1.5.1.3 验证2级和4级的优先级

要验证4级,按照以下步骤完成

  • 将工程打成 jar

    点击工程的 package 来打 jar
    在这里插入图片描述

  • 在硬盘上找到 jar 包所在位置

在这里插入图片描述

  • jar 包所在位置创建 config 文件夹,在该文件夹下创建 application.yml 配置文件,而在该配合文件中将端口号设置为 82

  • 在命令行使用以下命令运行程序

    java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar
    

    运行后日志信息如下

在这里插入图片描述

通过这个结果可以得出file: config 下的配置文件优先于类路径下的配置文件。

注意:

SpringBoot 2.5.0版本存在一个bug,我们在使用这个版本时,需要在 jar 所在位置的 config 目录下创建一个任意名称的文件夹


http://chatgpt.dhexx.cn/article/lSeuJDm9.shtml

相关文章

【Go实战 | 电商平台】(6) 用户信息修改

文章目录 写在前面1. 路由注册2. 函数编写2.1 service层2.2 api层 3. 服务编写4. 验证 写在前面 由于用户的登录涉及到了身份这一方面的认证&#xff0c;所以我们就可以通过JWT进行用户的鉴权&#xff0c;以确认用户的身份。 1. 路由注册 编写用户更新的请求路由 authed.PUT(…

github使用教程(二)【保姆级】{github desktop教程,github desktop的安装和配置}

下载github desktop 下载github desktop&#xff08;不选择Git&#xff0c;因为这个对于我这个初学者还有点复杂&#xff09; 官方下载地址&#xff1a;GitHub Desktop | Simple collaboration from your desktop github desktop setup 点击这个程序&#xff0c;登录你的gi…

使用github仓库

使用github仓库 一 创建仓库 1.注册github账户&#xff0c;登录后&#xff0c;点击"New respository " 2.在新页面中&#xff0c;输入项目的名称&#xff0c;勾选’readme.md’&#xff0c;点击’create repository’ 3.添加成功后&#xff0c;转到文件列表页面.…

GitHub使用指南——建立仓库、建立文件夹、上传图片详细教程

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 记录笔记&#xff0c;不能少了图片的解释&#xff0c;不知你是否是这样&#xff0c;反正我是比价喜欢有图片的说明&#xff0c;图片能够使得内容更加详细。 这篇博文就来…

gitHub使用记录

前言 之前一直用的都是Bitbucket&#xff0c;虽然gitHub很早就开通了&#xff0c;但是一直没有用它&#xff0c;今天算是第一次用吧。在配置上遇到了一些问题&#xff0c;在这里记录下来和大家一起分享。 什么是gitHub github是一个基于git的代码托管平台&#xff0c;付费用…

Linux使用GitHub

一、GitHub GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持git 作为唯一的版本库格式进行托管&#xff0c;故名GitHub 我们一直用GitHub作为免费的远程仓库&#xff0c;如果是个人的开源项目&#xff0c;放到GitHub上是完全没有问题的。其实GitHub还是…

MATLAB绘图颜色、线型设置

Matlab画图线型、符号及颜色汇总 Matlab基础之plot、plotyy的格式设置&#xff08;坐标&#xff0c;刻度&#xff0c;坐标值&#xff0c;不均匀的坐标轴显示&#xff09; Matlab画图常用的符号和颜色

Matlab plot画图线型、符号及颜色

一、画图线型、标记符、颜色的说明 来个简单的例子 figure,plot(Seg1,SS1_QJ1,k);hold on plot(Seg1,SS1_QJ1,ks) plot(Seg1,Q1*ones(length(Seg1)),r) xlabel(\bf{安装角}(),FontSize,10.508) %\bf是加粗的意思 %xlabel(\fontsize{10.508}\fontname{黑体}安装角\fontname{…

MATLAB 线型图

MATLAB 线型图 基本设置 线形 - Solid line (default) -- Dashed line : Dotted line -. Dash-dot line颜色 r Red g Green b Blue c Cyan m Magenta y Yellow k Black w White数据点的形状 Plus sign o Circle * Asterisk . Point x Cross s…

matlab画图(线条颜色以及线型)

类型表示含义颜色r红色y黄色k黑色w白色m品红c青蓝g绿色b蓝色线型-实线-.点划线--虚线:点线 例如&#xff1a; x0:pi/100:2*pi; ysin(x); plot(x,y) 运行结果如下图所示 &#xff1a; x0:pi/100:2*pi; y1sin(x); y2cos(x); figure; %%打开图窗命令 plot(x,y1,-.g);%%…

Matlab画图时的线型、标记以及颜色简记

文章目录 背景线型标记颜色例说 背景 使用Matlab画图的时候经常由于需要画图&#xff0c;但是总是忘了曲线颜色、线型以及标记&#xff0c;这里在这里记录下&#xff0c;方便查阅。 效果预览&#xff1a; LineSpec —线型&#xff0c;标记和颜色。 线型&#xff0c;标记和颜…

C语言中的递归

递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身&#xff0c;每调用一次就进入新的一层。直到某一条件跳出&#xff01; 例1、计算5的阶乘 例2、 #include <stdio.h> /* 定义获取单词数量的函数 */ int getWordNumber(int n) { if(n 1){r…

【C语言】函数与递归

目录&#x1f60a; 1. 函数是什么&#x1f43e; 2. 库函数&#x1f43e; 3. 自定义函数&#x1f43e; 4. 函数参数&#x1f43e; 5. 函数调用&#x1f43e; 6. 函数的嵌套调用和链式访问&#x1f43e; 7. 函数的声明和定义&#x1f43e; 8. 函数递归&#x1f43e; 1. 函…

理解C语言递归函数的逐级返回(return)

递归函数&#xff0c;也即调用自身的函数。 C Primer Plus中有个例子很棒&#xff1a; /*理解C语言递归函数*/ #include<stdio.h> void up_and_down(int); int main(void) { up_and_down(1); return 0; } void up_and_down(int n) { printf("level %d: n loaca…

什么是递归函数?

文章目录 递归函数递归例题特点效率优点 递归函数 递归 递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身&#xff0c;每调用一次就进入新的一层。递归函数必须有结束条件。 当函数在一直递推&#xff0c;直到遇到墙后返回&#xff0c;这个墙就是结束…

关于C语言中的递归函数

递归实例&#xff1a; #include <stdio.h>void up_and_down(int);int main(void) { up_and_down(1);return 0;} void up_and_down(int n) {printf("Level %d: n location %p\n", n, &n); // #1if (n < 4)up_and_down(n 1);printf("LEVEL %d: n …

C语言递归函数求n!的两种写法---详细讲解

递归函数&#xff1a;在调用一个函数的过程中又出现直接或间接地调用该函数本身&#xff0c;称为函数的递归调用。 题目&#xff1a;求n!的阶乘,n需要手动输入一个数。 解题思路&#xff1a;假设我们是求5的阶乘5&#xff01;&#xff0c;那么我就要知道4&#xff01;等于多少…

C语言——函数的递归

函数的声明和定义 函数声明&#xff1a; 1.告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么&#xff0c;但是具体是不是存在&#xff0c;并不重要。 2.函数的声明一般出现在函数的使用之前&#xff0c;要满足先声明后使用。 3.函数的声明一般要…

【C语言】函数递归详解

函数递归 1. 什么是函数递归2. 递归的两个必要条件2.1 练习1&#xff1a;打印一个数的每一位2.2 练习2&#xff1a;求字符串长度&#xff08;strlen 模拟实现&#xff09; 3. 递归与迭代3.1练习3&#xff1a;求 n 的阶乘&#xff08;不考虑溢出&#xff09;3.1.1 递归求 n 的阶…

C语言详解:函数递归专题

文章目录 函数递归函数递归的定义和优缺点递归的使用场景及必要条件递归的细节说明递归的习题讲解1打印整数每一位输入输出示例解题思路代码逻辑 2递归和非递归求n阶乘输入输出示例解题思路代码逻辑 3strlen函数模拟输入输出示例解题思路代码逻辑 4逆序字符串输入输出示例解题思…