Spring Boot 核心配置

news2024/11/17 1:27:19
一、 Spring Boot配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置

application.properties 语法结构 :key=value

application.yml 语法结构 :key:空格 value (冒号后面必须要有空格)

小结

SpringBoot提供了2种配置文件类型:properteisyml/yaml

默认配置文件名称:application

在同一级目录入如果三类文件共存,优先级为:properties > yml > yaml

二、YAML概述

YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如:C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。

YAML文件的扩展名可以使用.yml或者.yaml

server.port=8080
<server>
  <port>8080</port>
</server>
server:
    port: 8080
三、YAML基础语法
1.要点

1. 大小写敏感

2. 数据值前边必须有空格,作为分隔符

3. 使用缩进表示层级关系

4. 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。

5. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

6. "#"表示注释,从这个字符一直到行尾,都会被解析器忽略。

2.YAML:数据格式
字面量:(空格)普通的值 [ 数字,布尔值,字符串 ]
boolean: TRUE 												#TRUE,true,True,FALSE,false,False均可 
float: 3.14 #6.8523015e+5 						#支持科学计数法 
int: 123 															#0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制 
string: HelloWorld 										#字符串可以直接书写 
数组:一组按次序排列的值( List、set )
address: 
    - beijing 
    - shanghai 
# 行内写法 
commpany: [阿里巴巴,华为,腾讯,字节跳动] 
对象、Map(键值对)
person: 
    name: wangzhuo 
# 行内写法 
person: {name: wangzhuo} 
#对象数组格式一 
users: 
    - name: Tom 
      age: 4 
    - name: Jerry 
      age: 5 
#对象数组格式二 
users: 
    - 
      name: Tom 
      age: 4 
    - 
      name: Jerry 
      age: 5 
#对象数组缩略格式 
users2: [ { name:Tom,age:4 },{ name:Jerry,age:5 } ] 
参数引用
name: tom

person: 
    name: women
    pet: ${name}	#引用上面定义的name值

YAML小结

1) 配置文件类型

    • properties:和以前一样 (设置文件的语言编码UTF-8)
    • yml/yaml:注意空格

2) yaml:简洁,以数据为核心

  • 基本语法
    • 大小写敏感
    • 数据值前边必须有空格,作为分隔符
    • 使用空格缩进表示层级关系,相同缩进表示同一级
  • 数据格式
    • 对象
    • 数组: 使用 " - "表示数组每个元素
    • 纯量
  • 参数引用
    • ${key}
四、读取配置内容

yaml文件更强大的地方在于,可以给我们的实体类直接注入匹配值

逐个注入:@Value

批量注入:

  • @ConfigurationProperties
  • Environment类

1.逐个注入1:@Value("")
@Component //注册bean
public class Dog {
    @Value("阿黄")
    private String name;
    @Value("18")
    private Integer age;
}
2.逐个注入2:@Value("${}")

@PropertySource:加载指定的配置文件

去在resources目录下新建一个dog.yml文件

name: 阿黄
age: 18
@PropertySource(value = "classpath:dog.yml")
@Component //注册bean
public class Dog{
    @Value("${name}")
    private String name;
    @Value("${age}")
    private Integer age;
}

3.批量注入1:@ConfigurationProperties
@Component //注册bean到容器中
public class Person {
    private String name;
    private integer age;
    private boolean marry;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    //有参无参构造、get、set方法、toString()方法
}

编写yaml文件内容:

person1:
  name: wangls
  age: 18
  marry: true
  birth: 1990/10/19
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - bodybuilding
    - music
  dog:
    name: summer
    age: 1

@ConfigurationProperties作用:将配置文件中配置的每一个属性的值,映射到这个组件中;

告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定

参数 prefix = “person1” : 将配置文件中的person1下面的所有属性一一对应

4批量注入2:Environment类

在测试类中装配开发模式类辅助获取key对应value数据

@Autowired
private Environment env;
@Test
public void test(){
    System.out.println(env.getProperty("person1.name"));
    System.out.println(env.getProperty("person1.age"));
    System.out.println(env.getProperty("person1.dog.name"));
    System.out.println(env.getProperty("person1.lists[0]"));
}
5.对比小结

对比

@ConfigurationProperties

@Value()

功能

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

一个个指定

松散语法

支持

不支持

SqEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

1、@ConfigurationProperties只需要写一次即可,@Value则需要每个字段都添加

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

3、JSR303数据校验,这个就是我们可以在字段是增加一层过滤器验证 ,可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

6.结论:
  • 配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
  • 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
  • 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties
五、JSR303数据校验

对于 web 服务来说,为防止非法参数对业务造成影响,在 Controller 层一定要做参数校验的!大部分情况下,请求参数分为如下两种形式:

1. POST 、 PUT 请求,使用 requestBody 传递参数;

2. GET 请求,使用 requestParam/PathVariable 传递参数。

1.什么是 JSR303 标准?
  • JSR的全称是Java Specification Requests(Java 规范提案),是指向JCP ( Java Community Process )提出新增一个标准化技术规范的正式请求。
  • Java API 规范( JSR303 )定义了 Bean 校验的标准 validation-api ,但没有提供实现。
  • hibernate validation 是对这个规范的实现,并增加了校验注解如 @Email 、 @Length 等。 Spring Validation 是对 hibernate validation 的二次封装,用于支持 spring mvc 参数自动校验。
2.JSR303校验注解的使用步骤

1.添加依赖,导入spring-boot-starter-validation启动器

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.在实体类需要校验的成员字段(Field)上,添加校验注解。

@Component //注册bean到容器中
//@ConfigurationProperties(prefix = "dog")
//@Validated
public class Dog {
    @NotNull(message = "狗名不能为空")
    private String name;
    @NotNull(message = "狗命不能为空")
    @Max(value = 15,message = "狗命拿来")
    private Integer age;
    @Min(value = -1,message = "狗还是个细胞")
    private Integer length;
    @Email(message = "邮箱必须合法")
    private String email;
}

3.在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果

@RequestMapping("/validationDemo")
public String validationDemo(@Valid Dog dog, BindingResult result){
    //得到所有错误信息计数
    int errorCount = result.getErrorCount();
    //错误数大于0
    if (errorCount>0){
        //得到所有错误
        List<FieldError> fieldErrors = result.getFieldErrors();
        //迭代错误
        for (FieldError fieldError:fieldErrors) {
            //错误信息
            System.out.println( "属性:{"+fieldError.getField()+"},传来的值是:{"+fieldError.getRejectedValue()+"},出错的提示消息:{"
            +fieldError.getDefaultMessage()+"}");
        }
        return "数据不合法";
    }else{
        return "数据合法";
    }
}
3.JSR303校验注解的分类
  • 值校验
  • 范围校验
  • 长度校验
  • 格式校验
六、Controller统一异常处理

@ControllerAdvice:统一为Controller进行增强

@ExceptionHandler:异常处理

@ControllerAdvice
public class BindExceptionUtilAdvice {
    // 验证参数未使用@RequestBody注解
    @ExceptionHandler(BindException.class)
    @ResponseBody//选择添加
    public String handlerBindException(BindException ex, HttpServletRequestrequest){
        return "全局异常处理器成功"; 
        // 跳转至统一提示错误信息的视图
    }
}
七、多环境切换profile

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

命名语法:

例如:application-环境简称.properties/yml

application-dev.properties/yml 开发环境

application-test.properties/yml 测试环境

application-pro.properties/yml 生产环境

1) profile配置方式多profile文件方式

2) profile激活方式

配置文件 :

spring:
    profiles:
        active: 环境简称
          

虚拟机参数 :在VM options 指定:-Dspring.profiles.active=dev

命令行参数:java –jar xxx.jar --spring.profiles.active=dev

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

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

相关文章

外贸市场开发【越南】

​作为“新兴之秀” 越南的经济发展可谓是突飞猛进 并在2022年&#xff0c;成为全亚洲经济增长最快速经济体 经济的增长也让越南的地位变得不一样了 一起来看看外贸人聚焦的东南亚排名前五的越南 越南社会主义共和国&#xff0c;通称越南&#xff0c;是位于东南亚的中南半岛…

谷粒商城实战笔记-213-商城业务-认证服务-整合短信验证码服务

文章目录 一&#xff0c;开通阿里云云市场短信服务1&#xff0c;阿里云开通免费短信服务并调试2&#xff0c;整合短信服务2.1 下载HttpUtils代码2.2 开发调用短信服务的组件2.3 测试 HttpUtils代码 这一节主要内容是整合短信发送服务。 一&#xff0c;开通阿里云云市场短信服务…

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现CPO-BP冠豪猪优化…

CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

我的课程笔记&#xff0c;欢迎关注&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器 课程内容 上面三张Slides讲述了运行时间&#xff08;runtime&#xff09;和内存使用&…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT&#xff1f; ChatGPT是由 OpenAI 开发的先进人工智能语言模型&#xff0c;能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议&#xff0c;甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本&#xff0c;它们都拥有强大的语言处理能力&…

sublime text 4 安装(含激活码)安装破解汉化 Sublime Text 4 的操作指南

sublime text 4 安装&#xff08;含激活码&#xff09; 一、下载步骤 官网地址&#xff1a;Sublime Text - the sophisticated text editor for code, markup and prosehttps://link.zhihu.com/?targethttps://www.sublimetext.com/ windows下载链接&#xff1a;Thank You -…

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 补充选学内容

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 首先我们继续推进网课进度。 https://space.bilibili.com/1069874770 传送门 WorldArt锦书产品介绍&#xff1a; 我属实是没想到这个产品居然还可以用作遗迹鉴定和名家笔记仿写这样…

2.2算法的时间复杂度与空间复杂度——经典OJ

本博客的OJ标题均已插入超链接&#xff0c;点击可直接跳转~ 一、消失的数字 1、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 2、题目分析 &#xff08;1&#xff09;numsS…

Java流程控制之循环结构(附案例说明)超详细

循环结构&#xff1a;根据循环条件&#xff0c;重复性执行某段代码 for循环 while 循环 do-while 循环 凡是循环 就有4个要素&#xff1a; 1、初始化要素2、循环条件&#xff08;一定是boolean类型的变量或表达式&#xff09; 3、循环体 4、迭代部分 for 循环格式 for(1;2;…

阿里声音项目Qwen2-Audio的部署安装,在服务器Ubuntu22.04系统——点动科技

阿里声音项目Qwen2-Audio的部署安装&#xff0c;在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表&#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有…

JAVA学习之知识补充(下)

六&#xff1a;File类与IO流&#xff1a; 这里给出三种常见的初始化方法&#xff1a; 通过文件路径初始化: File file new File("C:/example/test.txt");这种方法用于创建一个文件对象&#xff0c;该文件对象表示指定路径的文件或目录。例如&#xff1a;File fil…

Zookeeper服务注册及心跳机制详解

ZooKeeper提供了一种类似于文件目录的结构来保存key值&#xff0c;其提供了四种key类型&#xff0c;分别是持久节点&#xff0c;临时节点&#xff0c;持久有序节点&#xff0c;临时有序节点。其中临时节点的特性是当创建此节点的会话断开时&#xff0c;节点也会被删除。这一特性…

xss.function靶场(easy)

文章目录 第一关Ma Spaghet!第二关Jefff第三关Ugandan Knuckles第四关Ricardo Milos第五关Ah Thats Hawt第六关Ligma第七关Mafia第八关Ok, Boomer 网址&#xff1a;https://xss.pwnfunction.com/ 第一关Ma Spaghet! 源码 <!-- Challenge --> <h2 id"spaghet&qu…

一文掌握 Web 测试:功能、界面、兼容与安全的综合测试指南!

随着Web技术的不断演进&#xff0c;测试除了对应用的功能性、界面美观性、跨平台兼容性的基本要求外、安全性和性能的要求也逐步增高。因此&#xff0c;全面、系统的测试思维和策略成为了保证Web应用高质量的关键因素。本篇文章将从功能测试、界面测试、兼容性测试和安全测试四…

AI歌手-五月天(声音转换)

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

JavaScript - 数组对象中实用好玩的reduce方法

JavaScript中reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行)&#xff0c;将其结果汇总为单个返回值。 语法&#xff1a; arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]) 参数配置&#xff1a; 参数名描述cal…

系列:水果甜度个人手持设备检测-github等开源库和方案

系列:水果甜度个人手持设备检测 -- github等开源库和方案 概述 通常来说&#xff0c;年纪轻轻的我们一般都喜欢走捷径&#xff0c;对于智能设备和算法软件领域来说&#xff0c;GitHub应该算为数不多的的捷径之一。就算因为效果不好/知识产权/方向不同等原因不用&#xff0c;…

XML外部实体注入

1.DTD实体及引用 DTD(文档类型定义)是一种用于定义XML文档结构和元素约束的方法。它可以描述一个XML文档的元素、属性、实体、注释等&#xff0c;从而规定了文档的结构和语法规则。DTD 通常是一个单独的文件&#xff0c;可以被多个XML文档所共享。 而在DTD中&#xff0c;实体…

日志分析-Windows

目录 Windows事件日志场景 1&#xff08;问题 1&#xff09;&#xff1a;服务器管理员向管理层提出了大量关于 PowerShell 在环境中被阻止的投诉。管理层最终批准在环境中使用 PowerShell。查看哪些日志、监控哪些事件 ID 等。场景 2&#xff08;问题 2&#xff09;&#xff1a…