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

SpringBoot 学习(二)配置

2. SpringBoot 配置

2.1 配置文件类型

  • 配置文件用于修改 SpringBoot 的默认配置

2.1.1 properties 文件

  • **properties ** 是属性文件后缀。

  • 文件名:application.properties

  • 只能保存键值对。

  • 基础语法:key=value

    name=why
    
  • 注入配置类

    @Component  // 声明为 Spring 组件
    @PropertySource(value = "classpath:config.properties")
    public class Person {@Value("${name}")private String name;   
    }
    

    需要在 IDEA 的 settings --> FileEncodings 中设置编码格式为 UTF-8。

    在这里插入图片描述

2.1.2 yaml 文件

  • yaml 是一个可读性高,用来表达数据序列化的格式。

  • 文件名:application.ymlapplication.yaml

  • 能保存键值对对象表达式

  • 基础语法:key: 空格 value

    # 键值对
    name: why# 对象
    student:name: whyage: 20student: {name: why,age: 20}# 数组
    pets: - cat- dog- pigpets: [cat,dog,pig]# 表达式
    dog:name: ${siri:siri}_旺财
    
  • 注入配置类

    • 导入依赖

      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
      </dependency>
      
    • 映射到类

      @Component  // 声明为 Spring 组件
      @ConfigurationProperties(prefix = "person") // 映射配置文件的值到组件
      public class Person {...}
      

2.1.3 配置注入比较

@ConfigurationProperties@Value
功能批量注入配置文件中的属性指定注入配置文件中的属性
松散绑定×
SpEL
JSR303 数据校验×
复杂类型封装×
(1) 松散绑定
  • yaml 文件中的 dog-name 可以为类中的 dogName 赋值

    dog:dog-name: 富贵dog-age: 3
    
    @Component
    @ConfigurationProperties(value = "dog")
    public class Dog {private String dogName;private Integer dogAge;
    }
    
(2) JSR303数据校验
● 检查属性的数据格式。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
person:email: 123456
@Component  // 声明为 Spring 组件
@Validated  // 数据格式校验
@ConfigurationProperties(prefix = "person") // 映射配置文件的值到组件
public class Person {@Email(message = "邮箱格式错误")private String email;
}

检查结果:default message [邮箱格式错误];

● 数据格式检查常用注解

Maven:jakarta.validation:jakarta.validation-api:2.0.2

注解作用类型解释
@NotNull任何类型属性不能为null
@NotEmpty集合集合不能为null,且size大于0
@NotBlanck字符串、字符字符类不能为null,且去掉空格之后长度大于0
@AssertTrueBoolean、boolean布尔属性必须是true
@Min数字类型(原子和包装)限定数字的最小值(整型)
@Max同@Min限定数字的最大值(整型)
@DecimalMin同@Min限定数字的最小值(字符串,可以是小数)
@DecimalMax同@Min限定数字的最大值(字符串,可以是小数)
@Range数字类型(原子和包装)限定数字范围(长整型)
@Length字符串限定字符串长度
@Size集合限定集合大小
@Past时间、日期必须是一个过去的时间或日期
@Future时期、时间必须是一个未来的时间或日期
@Email字符串必须是一个邮箱格式
@Pattern字符串、字符正则匹配字符串

2.2 配置文件路径

2.2.1 路径优先级

  • 优先级从高到低排序

    • file 为项目目录,classpath 为资源目录,即 resources

      (1) file:./config/

      (2) file:./

      (3) classpath:/config/

      (4) classpath:/

2.2.2 多环境配置

  • 整合线上、测试或者其他用途的环境配置。
properties 文件
  • application.properties

    spring.profiles.active=test
    
  • application-test.properties

    server.port=8081
    
  • application-dev.properties

    server.port=8082
    
yaml 文件
  • application.yml

    server:port: 8080
    spring:profiles: test
    ---
    server:port: 8081
    spring:profiles: test
    ---
    server:port: 8082
    spring:profiles: dev
    

2.3 配置文件内容

  • 配置文件中的内容都基于 xxxAutoConfiguration 绑定并装配的 xxxProperties 类。
    • 开发者编写配置文件,给 xxxProperties 类属性赋值。
    • xxxAutoConfiguration 使用 xxxProperties 类属性修改配置默认值。
  • 配置文件 --> xxxProperties --> xxxAutoConfiguration --> 修改配置默认值

2.4 总结

  • SpringBoot 启动会加载大量自动配置类,

  • 检查 SpringBoot 默认的自动配置类中是否含有所需配置组件,若没有则需手动添加。

  • 手动添加组件时,SpringBoot 从 Properties 类中获取某些属性,在配置文件中指定这些属性的值即可实现自动装配。

  • xxxAuotoConfiguration:自动配置类;

    xxxProperties:封装配置文件的相关属性;

    xxx.yml:为属性赋值,完成配置。

  • debug: ture :日志打印配置。

相关文章:

SpringBoot 学习(二)配置

2. SpringBoot 配置 2.1 配置文件类型 配置文件用于修改 SpringBoot 的默认配置。 2.1.1 properties 文件 **properties ** 是属性文件后缀。 文件名&#xff1a;application.properties 只能保存键值对。 基础语法&#xff1a;keyvalue namewhy注入配置类 Component //…...

西门子828d授权密钥破解经验分享 I7I54833762

操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组&#xff0c;其中元素按升序排序&#xff0c;而不改变原始数组。 Array.prototype.toReversed() //返回一个新数组&#xff0c;该数组的元素顺序被反转&#xff0c;但不改变原始数组。 Array.prototype.to…...

06贪心:跳跃游戏

06贪心&#xff1a;跳跃游戏 55. 跳跃游戏 刚看到本题一开始可能想&#xff1a;当前位置元素如果是 3&#xff0c;我究竟是跳一步呢&#xff0c;还是两步呢&#xff0c;还是三步呢&#xff0c;究竟跳几步才是最优呢&#xff1f; 其实跳几步无所谓&#xff0c;关键在于可跳的…...

鄙视测试,理解测试,成为测试

首先&#xff0c;其实题主的问题还是很实诚的&#xff0c;我刚开始做测试的时候其实也是这个心态&#xff0c;想转开发&#xff0c;也学习了很多的语言&#xff0c;个人觉得这是职业危机感的表现&#xff0c;挺好的&#xff0c;也相信题主不管去做开发和测试都会去不断的学习和…...

MySQL数据库基础知识要点总结

目录 前言 一.数据库构成 1.1 表 1.2 关系 1.3 索引 1.4 查询语言 1.5 数据库管理系统 二.数据类型 2.1 整数 2.2 浮点 2.3 日期与时间 2.4 字符串 三.约束条件 3.1 主键约束 3.2 唯一约束 3.3 外键约束 3.4 非空约束 3.5 默认值约束 总结 前言 数据库是…...

基础运维(一)YUM仓库

一 自定义YUM仓库 1 Yum仓库特点 作为yum源需要准备的内容 大量的rpm 软件安装包文件针对这些软件包的 repodata/ 仓库档案 repodata/ 仓库档案数据 filelists.xml.gz // 软件包的文件安装清单primary.xml.gz // 软件包的基本/主要信息other.xml.gz // 软件包…...

递归算法讲解,深度理解递归

首先最重要的就是要说明递归思想的作用&#xff0c;在后面学习的高级数据接口&#xff0c;树和图中&#xff0c;都需要用到递归&#xff0c;即深度优先搜索&#xff0c;如果递归掌握的不好&#xff0c;后面的数据结构将举步为艰。 加油 首先看下如何下面两个方法有什么区别&a…...

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…...

anaconda navigator启动时一直卡在 loading applications 页面

anaconda navigator启动时一直卡在 loading applications 页面 方法1 在安装目录找到D:\anaconda\Lib\site-packages\anaconda_navigator\api 然后打开conda_api.py&#xff0c; 在1358行找到data yaml.load(f)&#xff0c;将其改为data yaml.safeload(f) 猜测为保证代码…...

力扣刷题-链表-删除链表的倒数第N个节点

19.删除链表的倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a;输入&#xff1a;head [1], n 1 输出&…...

Blender DreamUV插件使用简明教程

DreamUV 是一个可让你在Blender的 3D 视口中操纵 UV的工具集合。 该工具集设计用于可重复使用的纹理&#xff0c;例如平铺纹理、装饰表和纹理图集。 其目的是让你无需退出 3D 视图即可对几何体进行纹理处理&#xff0c;从而节省时间并提高灵活性。 1、安装DreamUV 首先下载为…...

AI在线工具分享

1、ChatGPT ChatGPT是一种由OpenAI训练的大型语言模型。它的原理是基于Transformer架构&#xff0c;通过预训练大量文本数据来学习如何生成人类可读的文本&#xff0c;然后通过接受输入并生成输出来实现对话。 ChatGPT的用途非常广泛&#xff0c;可以用于自然语言处理&#xf…...

Matlab批量处理测试数据的方法:以VCO的调谐测试曲线处理为例

我们都知道得到的VCO调谐曲线是一根一根扫出来的&#xff0c;如果要手动对数据进行处理很麻烦。 &#xff08;当然最好是搭建一个自动化测试平台&#xff0c;一边测试一边把数据抓取了&#xff0c;这个以后可以搞一下再更新&#xff09; 目前还是手动测量的情况下&#xff0c;…...

VScode断点调试vue

VScode断点调试vue 1、修改launch.js文件&#xff08;没有这个文件就新建&#xff09;。 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlin…...

20吨屠宰鸡鸭鹅一体化污水处理设备加工厂家

20吨屠宰鸡鸭鹅一体化污水处理设备加工厂家 溶气气浮机主要构造说明 气浮系统气浮系统集进水、絮凝、分离、集水、出水于一体&#xff0c;与传统气浮设备类似&#xff0c;设有一个稳流室、溶气释放室&#xff0c;使处理性能更稳定&#xff0c;效果更优越。 稳定室&#xff1a;通…...

android被杀以后fragments缓存重建问题和测试方法

这个问题&#xff0c;其实不是太好复现。因为在android的缓存Fragment机制是写在androidx的库中。 主要的原因是android Framework机制&#xff1a; framework at yourpackage.onSaveInstanceState(XXXActivity.kt:118) at android.app.Activity.performSaveInstanceState(A…...

Visual Studio 2017 安装

C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接&#xff1a;https://pan.baidu…...

day5|242.有效的字母异位词、349. 两个数组的交集

242.有效的字母异位词 题目链接&#xff1a;https://leetcode.cn/problems/valid-anagram/ 文章链接&#xff1a;https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html 视频链接&#xff1a;https://www.bilibili.…...

【Python基础】常用模块学习:sys|os|pytest

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

【煤矿虚拟仿真体验】VR采煤机技能培训有效提高训练效果

在我们的社会中&#xff0c;能源是至关重要的。它是推动我们日常生活和工作的主要动力。然而&#xff0c;我们在获取这种能源的过程中&#xff0c;也带来了许多环境问题。煤矿开采是其中的一个重要部分&#xff0c;因此我们需要寻找更环保、更安全的方式来进行煤矿开采。VR&…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...