首页 > 其他分享 >【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解

时间:2023-12-28 11:34:37浏览次数:43  
标签:SpringBoot 配置文件 spring 如下 application port 端口号 入门


之前我们已经学习的Spring、SpringMVC、Mabatis、Maven,详细讲解了Spring、SpringMVC、Mabatis整合SSM的方案和案例,上一节我们学习了SpringBoot的开发步骤、工程构建方法以及工程的快速启动,从这一节开始,我们开始学习SpringBoot配置文件。接下来,我们逐步开始学习,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_后端

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 环境准备

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_配置文件_02

在该工程中的 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.2 不同配置文件演示

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

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_配置文件_03

  • application.yml配置文件

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

server:
	port: 81

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

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_后端_04


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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_spring_05

  • application.yaml配置文件

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

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

server:
	port: 83

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_java_06


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

  • 点击 File 选中 Project Structure
  • 【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_spring boot_07

  • 弹出如下窗口,按图中标记红框进行选择
  • 【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_java_08

  • 通过上述操作,会弹出如下窗口
  • 【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_spring_09

  • 点击上图的 + 号,弹出选择该模块的配置文件
  • 【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_配置文件_10

  • 通过上述几步后,就可以看到如下界面。 properties 类型的配合文件有一个, ymal 类型的配置文件有两个
  • 【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_配置文件_11

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

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: itcast
	age: 16
	tel: 4006184000

优点:

  • 容易阅读
    yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰
  • 容易与脚本语言交互
  • 以数据为核心,重数据轻格式
    yaml 更注重数据,而 xml 更注重格式

YAML 文件扩展名

  • .yml (主流)
  • .yaml

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

2.1 语法规则

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
    空格的个数并不重要,只要保证同层级的左侧对齐即可。
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释
    核心规则:数据前面要加空格与冒号隔开

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

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

3 yaml配置文件数据读取

3.1 环境准备

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_后端_12


在 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: SpringBoot
server:
	port: 80
enterprise:
	name: itcast
	age: 16
	tel: 4006184000
	subject:
		- Java
		- 前端
		- 大数据

3.2 读取配置数据

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!";
	}
}

3.2.2 Environment对象

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

@RestController
@RequestMapping("/books")
public class BookController {
	@Autowired
	private 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!";
	}
}

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

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;
	}
	@Override
	public String toString() {
		return "Enterprise{" +
				"name='" + name + '\'' +
				", age=" + age +
				", tel='" + tel + '\'' +
				", subject=" + Arrays.toString(subject) +
				'}';
	}
}

BookController 内容如下:

@RestController
@RequestMapping("/books")
public class BookController {
	@Autowired
	private 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!";
	}
}

注意:

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_后端_13


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

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

4 多环境配置

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_java_14


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

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

4.2 properties文件

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

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

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

spring.profiles.active=pro

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#bootfeatures-external-config

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_spring_15


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

5 配置文件分类

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_spring_16


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

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

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

5.1 代码演示

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

5.1.1 环境准备

创建一个名为 springboot_06_config_file 的 SpringBoot 工程,目录结构如下

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_java_17


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

server:
	port: 81

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

server:
	port: 80

5.1.2 验证1级和2级的优先级

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

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_java_18


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

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

运行后日志信息如下

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解_spring_19


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


标签:SpringBoot,配置文件,spring,如下,application,port,端口号,入门
From: https://blog.51cto.com/u_12948819/9011988

相关文章

  • 【SpringBoot快速入门】(1)SpringBoot的开发步骤、工程构建方法以及工程的快速启动详
    目录SpringBoot简介1SpringBoot快速入门1.1开发步骤1.1.1创建新模块1.1.2创建Controller1.1.3启动服务器1.1.4进行测试2对比3官网构建工程3.1进入SpringBoot官网3.2选择依赖3.3生成工程4SpringBoot工程快速启动4.1问题导入4.2打包4.3启动之前我们已经学习的Sprin......
  • SpringBoot 整合 ShardingSphere JDBC、MySQL分表实例
    1.概述ShardingSphere分为ShardingSphere-JDBC、ShardingSphere-Proxy、ShardingSphere-Sidecar(TODO)。ShardingSphere官方手册:传送门;这里使用的是ShardingSphere-JDBC,ShardingSphere-JDBC为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar......
  • 【Spring】SpringMVC项目升级成SpringBoot实践
    将SpringMVC项目升级为SpringBoot项目需要一系列详细的步骤。以下是一个更详细的步骤指南:项目初始化:创建一个新的SpringBoot项目。您可以使用SpringInitializr或SpringBoot的Maven插件来快速生成项目结构。依赖管理:在新项目中,添加所需的依赖。根据您的项目需求,添加SpringBoot......
  • 日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队
    前言随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序是不完整的,甚至可以说是有缺陷的......
  • 【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解
    大家好,我是独孤风,今天的元数据管理平台Datahub的系列教程,我们来聊一下DatahubCLI。也就是Datahub的客户端。我们在安装和使用Datahub的过程中遇到了很多问题。如何安装Datahub?为什么总是拉取镜像?如何启动Datahub?这些Datahub的Docker命令都是做什么的?有很多同学虽然搜......
  • Unreal入门,开关04,蓝图通讯的几种方式(总结)
    1.直接调用,一开始做的开关就是这种方式,在地图编辑的时候给开关对象设置好关联的灯的引用,触发的时候直接调用灯提供的开关函数即可1.1给ActorSwitch添加一个ObjectReference成员1.2在地图编辑器中初始化这个成员,关联到ActorLight1.3在Overlap事件中通过ActorLight的引......
  • springboot 共享session
    在SpringBoot中,可以使用SpringSession来实现共享session。SpringSession是一个基于Spring的会话管理框架,它提供了跨多个服务器的会话共享功能。要使用SpringSession实现共享session,需要按照以下步骤进行配置:添加依赖在SpringBoot项目的pom.xml文件中添加SpringSession的依赖:x......
  • 软件测试/测试开发|一篇文章带你入门HTML
    前言上一篇文章我们提到了web的三大主要资源,HTML,CSS以及JS,HTML是提供web页面内容的资源,本文我们就来介绍一下HTML。HTMLHTML(HyperTextMarkupLanguage)是web的核心组成部分之一,是构建网页的基础语言。HTML使用标记来描述文档的结构,并定义了网页上的内容,包括文本、图像、链接等。HTM......
  • 最新SQLMap安装与入门技术
    SQLMap详解SQLMap是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞。SQLMap内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、MicrosoftSQLServer、MicrosoftAccess、IBMDB2、SQLite、Firebird、Sybase和SAPMaxDB。SQLMap采用了以下......
  • mybatis在读取配置文件,创建SqlSessionFactory对象时。需要对密码进行解密,再连接数据库
    1、我看了网上很多的方法,主要是说通过新建一个jdbc.properties来获取数据库连接池。但是我试了并没有作用。 2、解决办法:简单粗暴。先用后代码读取原有的mybatis-configuration.xml,然后将密码进行解密后,设值到xml中。最后把解密的xml作为源。去生成一份新的xml文件,把心的xml......