【SpringBoot详细教程】-02-SpringBoot配置【持续更新】

 Hello!彦祖们,从今天开始我将更新一波超详细的SpringBoot的图文教程,感兴趣的老铁给个关注+点赞 支持一下呗,最好再评论一个666,O(∩_∩)O哈哈~(贪心了)

==============点个关注吧============

==================================

02. SpringBoot配置

SpringBoot使用一个全局的配置文件,配置文件名是固定的:

  • application.properties
语法结构:key=value
  • application.yml
语法结构:  key: value 
  • 以前的配置文件;大多都使用的是  xxxx.xml 文件;
  • YAML:以数据为中心,比 json、xml 等更适合做配置文件;

💬 比如我们可以在配置文件中修改 Tomcat 默认启动的端口号

YAML:

server:port: 8081

properties:

server.port=8081

🌲 YAML 语法

🌾 基本写法

k: v:表示一对键值对(空格必须有)

空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的

server:port: 8081path: /hello

🌾 值的写法

🍁 字面量:普通的值(数字,字符串,布尔)

字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;

k: v

" ":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
💬 例如:

name: "zhangsan \n lisi"

输出:

zhangsan
lisi

' ':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
💬 例如:

name: ‘zhangsan \n lisi’

输出:

zhangsan \n lisi

🍁 Map(属性和值)(键值对)

k: v:在下一行来写对象的属性和值的关系,注意缩进

#对象、Map格式
k: v1:v2:

💬 例如:

friends:lastName: zhangsanage: 20

行内写法:

friends: {lastName: zhangsan,age: 18}

🍁 数组(List、Set)

- 值 表示数组中的一个元素

💬 例如:

pets:- cat- dog- pig

行内写法

pets: [cat,dog,pig]

🌲 全局配置文件值注入

🌾 全局配置文件注入

📜 需要导入配置文件处理器的依赖,配置文件进行绑定就会有提示(不加也行,只是没有提示)

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

注入步骤:

  1. 在resources中新建application.yml或者application.properties配置文件,添加如下配置:
🍁配置文件yaml格式:
person:lastName: 二郎神age: 18boss: falsebirth: 2017/12/12maps: {wife: 小甜甜, money: 300000}friends:- 王刚- 张龙- 赵虎dog:name: 哮天犬age: 12
🍁 配置文件properties格式:
person.last-name=zsf
person.age=100
person.birth=2017/12/15
person.boss=true
person.maps.k1=tj
person.maps.k2=yj
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15

🚨 注意:properties 配置文件在 IDEA 中默认 utf-8 可能会乱码,如图进行相应设置:

添加实体类:Dog.java

package com.moxuan.demo.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {private String name;private Integer age;
}

添加实体类:Person.java

package com.moxuan.demo.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.List;
import java.util.Map;@Component
// 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
@ConfigurationProperties(prefix = "person")
// prefix="person" 表示与配置文件中的哪一个属性进行一一映射
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> friends;private Dog dog;}
  • @ConfigurationProperties 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
  • prefix="person" 表示与配置文件中的哪一个属性进行一一映射.

控制器代码如下:

package com.moxuan.demo.controller;import com.moxuan.demo.entity.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyShowController {@AutowiredPerson person;@RequestMapping("test")public String show(){System.out.println(person);return person.toString();}
}

注意: 当properties文件和yml配置文件同时存在时,会优先选择properties文件,当properties配置文件没有时,会去yml中查找。

🌲 @Value值注入

可以使用 @Value 注解从配置文件中手动取值或者自由赋值,支持三种方式:

  • ${key} 从环境变量、配置文件中获取值
@Value("${person.last-name}")
private String lastName;
  • # {SpEL}
@Value("#{11*2}")
private Integer age;
  • "字面量"
@Value("true")
private Boolean boss;

修改配置文件如下:

person:last-name: 二郎神age: 18boss: falsebirth: 2017/12/12maps: {wife: 小甜甜, money: 300000}friends:- 王刚- 张龙- 赵虎dog:name: 哮天犬age: 12

Person类如下:

package com.moxuan.demo.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import java.util.Date;
import java.util.List;
import java.util.Map;@Component
// 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
@ConfigurationProperties(prefix = "person")
// prefix="person" 表示与配置文件中的哪一个属性进行一一映射
@Data
@NoArgsConstructor
@AllArgsConstructor
@Validated
public class Person {@Value("${person.last-name}")private String lastName;@Value("#{11*2}")private Integer age1;@Value("true")private Boolean boss1;private Date birth;private Map<String,Object> maps;private List<Object> friends;private Dog dog;
}

控制器层:

package com.moxuan.demo.controller;import com.moxuan.demo.entity.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyShowController {@AutowiredPerson person;@RequestMapping("test")public String show(){System.out.println(person);return person.toString();}
}

运行效果:

🌲 全局注入和@Value注入比较

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

一个个指定

松散绑定(松散语法)

支持

不支持

SpEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

💡 松散绑定:比如 yml 中写的 last-name,这个和 lastName 是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定

无论配置文件是 yml还是 properties他们都能获取到值;

  • 如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用 @Value
@RestController
public calss HelloController{@Value("${person.lastName}")private String name;@RequestMapping("/sayHello")public String sayHello(){return "Hello" + name;}
}
  • 如果我们专门编写了一个 JavaBean 来和配置文件进行映射,就直接使用@ConfigurationProperties

🌲 @PropertySource 指定配置文件值注入

@ConfigurationProperties(prefix = "person") 默认从全局配置文件中获取值,如果所有的配置全写在全局配置文件中,那么这个文件就太大了。我们可以自定义配置文件使用 @PropertySource 加载指定的配置文件。

比如我们在 resources 目录下新建一个 person.properties 文件

person.last-name=zsf
person.age1=100
person.birth=2017/12/15
person.boss1=true
person.maps.k1=tj
person.maps.k2=yj
person.friends=a,b,c
person.dog.name=dog
person.dog.age=15

Person中使用方法:

package com.moxuan.demo.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import java.util.Date;
import java.util.List;
import java.util.Map;@Component
// 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
//@ConfigurationProperties(prefix = "person")
// prefix="person" 表示与配置文件中的哪一个属性进行一一映射
@PropertySource(value = {"classpath:person.properties"})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {@Value("${person.last-name}")private String lastName;@Value("#{11*2}")private Integer age1;@Value("true")private Boolean boss1;private Date birth;private Map<String,Object> maps;private List<Object> friends;private Dog dog;}

🌲 Profile 多环境切换

profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境 👇

🌾 多配置文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

比如:application-dev.properties 、application-prod.properties

其中,application-dev.properties 通常用作开发环境的配置,而application-prod.properties通常用作生产环境的配置。

默认使用 application.properties 的配置,然后在其中指定具体使用哪种环境的配置。

🌾 激活指定环境

⭐ 在 application.properties 配置文件中指定

spring.profiles.active=dev

🌾 yml 支持多文档块方式

和 properties配置文件中一样,但是使用 yml去实现不需要创建多个配置文件,更加方便了~

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


server:port: 8080 # 默认端口
#选择要激活那个环境块
spring:profiles:# 激活active: prod # 使用 prod 环境,8084端口---
server:port: 8083
spring:config:activate:on-profile: dev #给开发环境起的名字
---
server:port: 8084
spring:config:activate:on-profile: prod #给生产环境起的名字
---
#测试
spring:profiles: test #给测试环境起的名字
server:port: 82
---

此时访问8080端口就会访问不到:

而访问8084端口可以访问到

🌲 配置文件分类

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

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

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

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

🌾 验证1,2级优先级

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

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

server:port: 81

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

server:port: 80

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

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

🌾 验证2,4级优先级

将工程打成 jar 包,点击工程的 package 来打 jar 包:

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

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

server:port: 82

在命令行跳转到jar包所在的目录,然后使用以下命令运行程序:

java -jar boot_02_file-0.0.1-SNAPSHOT.jar

运行效果:

可以看出启动的是82端口,也就是用的是jar包同级目录config中的配置文件,由此可见,file: config 下的配置文件优先于类路径下的配置文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147654.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

图像放大效果示例【JavaScript】

实现效果&#xff1a; 当鼠标悬停在小图&#xff08;缩略图&#xff09;上时&#xff0c;大图&#xff08;预览图&#xff09;会随之更新为相应的小图&#xff0c;并高亮当前悬浮的小图的父元素。 代码&#xff1a; 1. HTML部分 <!DOCTYPE html> <html lang"z…

[Excel VBA]如何使用VBA自动生成图表

在Excel中&#xff0c;图表是可视化数据的重要工具。以下是一个VBA代码示例&#xff0c;帮助你自动生成图表。 1. 代码说明 该代码会根据指定数据范围创建一个柱状图&#xff0c;并设置图表的基本属性。 2. VBA代码 Sub CreateChart()Dim ws As WorksheetDim chartObj As Ch…

转行要趁早!网络安全岗人才稀缺,前景广阔,零基础入门到精通,收藏这篇就够了

1 网络安全从业人员能力基本要求&#xff0c;您达标了吗&#xff1f; 引导 根据国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff08;2023年第1号&#xff09;&#xff0c;由全国信息安全标准化技术委员会归口的《信息安全技术 网络安全从业…

考题抄错会做也白搭——模板方法模式

文章目录 考题抄错会做也白搭——模板方法模式选择题不会做&#xff0c;蒙呗&#xff01;重复易错难改提炼代码模板方法模式模板方法模式的特点 考题抄错会做也白搭——模板方法模式 选择题不会做&#xff0c;蒙呗&#xff01; 时间&#xff1a;3月27日19点  地点&#xff…

【C++】智能指针模拟实现及详解

目录 什么是智能指针&#xff1a; 为什么要有智能指针&#xff1a; auto_ptr: unique_ptr&#xff1a; shared_ptr&#xff1a; shared_ptr的缺陷&#xff1a; weak_ptr: 什么是智能指针&#xff1a; 概念&#xff1a; 智能指针是一种特殊的类模板&#xff0c;用于自动…

【计算机网络 - 基础问题】每日 3 题(十九)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

java怎么给代码增加说明,让鼠标浮上去可以显示说明

java怎么给代码增加说明&#xff0c;让鼠标浮上去可以显示说明 简述 通过使用JavaDoc注释&#xff0c;你可以提高代码的可读性和可维护性&#xff0c;并且方便其他开发者理解你的代码。在Java中&#xff0c;为了让鼠标悬停在代码上时显示说明信息&#xff0c;你可以使用JavaDo…

​数据库: MyBatis-Plus

MyBatis-Plus MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;核心作用是简化 CRUD 操作和提升开发效率。它提供基础的增删改查方法、分页插件、条件构造器以及代码生成器&#xff0c;帮助减少重复代码量。MyBatis-Plus 不支持自动建表&#xff0c;专注于简化数据库操作&…

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略

CV之OCR&#xff1a;GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略 目录 GOT-OCR2.0的简介 1、更新 GOT-OCR2.0的安装和使用方法 1、安装 安装环境cuda11.8torch2.0.1 安装包 安装Flash-Attention GOT权重&#xff1a;1.43G 2、演示 3、训练 4、评估 GOT-…

直接在tomcat下面访问jsp

复制一份tomcat为tomcat-8.5.99test 记住修改tomcat-8.5.99test下面bin/startup.sh&#xff08;Linux/Mac&#xff09;或 bin/startup.bat&#xff08;Windows&#xff09; 在 Linux/Mac export CATALINA_BASE/path/to/tomcat1 $CATALINA_HOME/bin/startup.sh 在 Windows: …

springboot 控制器

springboot 控制器 文章目录 springboot 控制器1.Controller和RestController**Controller&#xff1a;数据和页面****RestController&#xff1a;数据**所以我们的controller一般在springmvc中使用&#xff0c;返回页面&#xff0c;但是现在的项目基本上都是前后端分离项目&am…

手写SpringMVC

1、开发HspDispatcherServlet 2、完成客户端/浏览器可以请求控制层 目的&#xff1a;发出url请求时&#xff0c;经过前端控制器&#xff0c;找到Monster的List方法&#xff0c;把结果再打回去 3、从web.xml动态获取hspspringmvc.xml 4、完成自定义Service注解功能 目的&…

什么是 SaaS?(软件即服务)

什么是SaaS软件&#xff1f; 软件即服务&#xff08;SaaS&#xff09;是一种云计算方法&#xff0c;其中应用程序在线存储&#xff0c;并以订阅的方式提供给用户。SaaS解决方案可以从任何web浏览器中使用&#xff0c;而无需在pc端或服务器上安装软件。 SaaS消除了基础设施、升…

Microsoft Edge 五个好用的插件

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 插件_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 Microsoft Edge 一.安装游览器 ​编辑 二.找到插件商店 1.打开游览器后&#xff0c;点击右上角的设置&#…

day-58 最佳观光组合

思路 用right表示最佳观光组合的右边的景点的索引&#xff0c;同时维护一个该景点左边values[left]left的最大值 解题过程 这样在遍历过程中&#xff0c;以right为右边景点的最佳得分即为values[right]-rightleftmax&#xff0c;再与ans比较&#xff0c;选择较大的那一个&…

ProtoBuf介绍及安装

文章目录 序列反序列化ProtoBuf特点安装ProtoBufwindowsUbuntuCentos 序列反序列化 在网络传输过程当中&#xff0c;可以理解为&#xff1a; 发送方接收方 它们彼此要通信&#xff0c;先要定好一个规则&#xff0c;也就是协议&#xff0c;双方都能认识的结构化数据&#xff…

优化 IT 投资与资源管理,实现企业数字化转型的成功

为何优化 IT 投资与资源管理对数字化转型至关重要 在当今瞬息万变的商业环境中&#xff0c;数字化转型已成为企业保持竞争力的必要手段。然而&#xff0c;随着技术的不断进步&#xff0c;企业在推进数字化进程时面临着巨大的IT 投资和资源管理挑战。优化这些投资不仅能确保企业…

算法.图论-并查集

文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板4. 并查集习题4.1 情侣牵手4.2 相似字符串组 1. 并查集介绍 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不…

突破距离限制:大文件跨境传输的高效策略揭秘

目前越来越多的人认识到大数据的重要性&#xff0c;有人将大数据比作“石油”&#xff0c;未来的某一天石油资源可能会面临枯竭&#xff0c;但是大数据中蕴藏的资源却不会。海外市场对于数据驱动的产品和服务的需求不断增加&#xff0c;越来越多的企业寻求更深度的跨国业务及合…

国内人工智能AI头部公司32家(包括详细技术、特点和综合实力)

国内AI头部公司前100家及其详细技术、特点和综合实力&#xff0c;基于当前行业认知和市场表现选取的一些代表性企业。 1. 百度&#xff08;Baidu&#xff09; 技术&#xff1a;百度在人工智能AI领域拥有深厚的技术积累&#xff0c;包括自然语言处理、计算机视觉、深度学习等核…