【WEEK9】 【DAY3】JSR303数据校验及多环境切换【中文版】

news2025/1/19 10:15:42

2024.4.24 Wednesday

目录

  • 4.JSR303数据校验及多环境切换
    • 4.1.JSR303数据校验(了解即可)
      • 4.1.1.修改Person.java
      • 4.1.2.修改pom.xml(添加依赖)
      • 4.1.3.运行Springboot02ConfigApplicationTests.java进行测试
      • 4.1.4.使用数据校验(后端),可以保证数据的正确性
      • 4.1.5.常见参数
    • 4.2.多环境切换
      • 4.2.1.将本项目冗余文件删除
      • 4.2.2.多配置文件
        • 例如
      • 4.2.3.Yaml的多文档块
        • 4.2.3.1.和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了
        • 4.2.3.2.注意:如果yml和properties同时都配置了端口,并且没有激活其他环境,默认会使用properties配置文件的!(删除.properties文件)
      • 4.2.4.配置文件加载位置
        • 4.2.4.1.外部加载配置文件(添加application.yaml文件的有效地址)的方式十分多,我们选择最常用的即可,在开发的资源文件中进行配置!
        • 4.2.4.2.springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:
      • 4.2.5.拓展,运维小技巧

4.JSR303数据校验及多环境切换

4.1.JSR303数据校验(了解即可)

4.1.1.修改Person.java

添加两个依赖(@Validated和@Email)

package com.p8.springboot02config.pojo;

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 javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Component  //注册bean
@ConfigurationProperties(prefix = "person")
@Validated  //数据校验

public class Person {
    //这里没有@Email注解提示的和@Email注解报错的去添加一下hibernate-validator依赖
    @Email()    //在括号内书写message = "格式错误"则报错时的提示信息会变更为"格式错误"
    private String name;    //提示,可以使用 shift + f6 实现所有的名称一起改
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    ...
}

4.1.2.修改pom.xml(添加依赖)

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

4.1.3.运行Springboot02ConfigApplicationTests.java进行测试

在这里插入图片描述
在这里插入图片描述

4.1.4.使用数据校验(后端),可以保证数据的正确性

4.1.5.常见参数

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.

Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false

长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合**正则表达式**的规则

…等等
除此以外,我们还可以自定义一些数据校验规则
在这里插入图片描述

4.2.多环境切换

4.2.1.将本项目冗余文件删除

如下:
在这里插入图片描述
清空application.yaml和Springboot02ConfigApplicationTests.java文件内容
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境。

4.2.2.多配置文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本。

例如

(创建: application.properties, application-test.properties, application-dev.properties)
在这里插入图片描述

application-test.properties代表测试环境配置
server.port=8081
application-dev.properties代表开发环境配置
server.port=8082

但是Springboot并不会直接启动这些配置文件,它默认使用application. properties主配置文件
在这里插入图片描述

->我们需要通过一个配置来选择需要激活的环境:

#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev

在这里插入图片描述

如果把dev更改成test,则运行application-test.properties
在这里插入图片描述

4.2.3.Yaml的多文档块

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

新建application.yaml
在这里插入图片描述

server:
  port: 8081  #默认
#选择要激活那个环境块
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev #配置环境的名称


---

server:
  port: 8084
spring:
  profiles: prod  #配置环境的名称
4.2.3.2.注意:如果yml和properties同时都配置了端口,并且没有激活其他环境,默认会使用properties配置文件的!(删除.properties文件)

在这里插入图片描述

4.2.4.配置文件加载位置

4.2.4.1.外部加载配置文件(添加application.yaml文件的有效地址)的方式十分多,我们选择最常用的即可,在开发的资源文件中进行配置!

https://docs.spring.io/spring-boot/docs/2.7.13/reference/htmlsingle/#features.external-config
在这里插入图片描述
故优先级最高的是下图中红框部分的内容
在这里插入图片描述
新建文件夹后需要修改文件夹类型
在这里插入图片描述

4.2.4.2.springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:
  • 优先级1:项目路径下的config文件夹配置文件(src/main/resources/config/application.yaml)
#src/main/resources/config/application.yaml
server:
  port: 8081

在这里插入图片描述

  • 优先级2:项目路径下配置文件(src/main/resources/application.yaml)
删除上一个优先级的文件后运行的就是这个了,后面的操作也是相同(删除配置文件后要刷新一下maven)
#src/main/resources/application.yaml
server:
  port: 8082

在这里插入图片描述

  • 优先级3:资源路径下的config文件夹配置文件(config/application.yaml)
#config/application.yaml
server:
  port: 8083

在这里插入图片描述

  • 优先级4:资源路径下配置文件(application.yaml)
#application.yaml
server:
  port: 8084

在这里插入图片描述
这里可能无法自动识别application文件(显示红色的yml图标,如:
在这里插入图片描述
),如何修改成绿色豌豆射手状?
修改Project Settings->Modules->找到该项目->修改成resources类型
在这里插入图片描述
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置。

4.2.5.拓展,运维小技巧

指定位置加载配置文件
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;这种情况,一般是后期运维做的多,相同配置,外部指定的配置文件优先级最高

java -jar spring-boot-config.jar --spring.config.location=F:/application.properties

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

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

相关文章

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能&#xff0c;该功能可以减少启动时间&#xff0c;但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档&#xff0c;则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

【氮化镓】液态Ga在GaN(0001)和(0001̅)表面上的三维有序排列随温度的变化

文章标题是《Temperature dependence of liquid-gallium ordering on the surface of epitaxially grown GaN》&#xff0c;作者是Takuo Sasaki等人&#xff0c;发表在《Applied Physics Express》上。文章主要研究了在分子束外延(MBE)条件下&#xff0c;液态镓(Ga)在GaN(0001)…

探索在Apache SeaTunnel上使用Hudi连接器,高效管理大数据的技术

Apache Hudi是一个数据湖处理框架&#xff0c;通过提供简单的方式来进行数据的插入、更新和删除操作&#xff0c;Hudi能够帮助数据工程师和科学家更高效地处理大数据&#xff0c;并支持实时查询。 支持的处理引擎 Spark Flink SeaTunnel Zeta 主要特性 批处理 流处理 精确一次性…

状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式&#xff0c;它们的主要目标都是将变化的行为封装起来&#xff0c;使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较&#xff0c;主要是因为两个设计模式的类图相似度较高。但是&#xff0c;从状态模式和策略模式的应用场景…

2024最新版JavaScript逆向爬虫教程-------基础篇之深入JavaScript运行原理以及内存管理

目录 一、JavaScript运行原理1.1 前端需要掌握的三大技术1.2 为什么要学习JavaScript1.3 浏览器的工作原理1.4 浏览器的内核1.5 浏览器渲染过程1.6 认识JavaScript引擎1.7 V8引擎以及JavaScript的执行过程1.8 V8引擎执行过程 二、JavaScript的执行过程2.1 初始化全局对象2.2 执…

解决宏定义后面无法加分号

总结&#xff1a;注意是针对单行if语句使用&#xff0c;并且宏定义后面必须带分号&#xff08;格式统一&#xff09; 参考连接 C语言种do_while(0)的妙用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1vk4y1R7VJ/?spm_id_from333.337.search-card.all.click&vd_…

Excel数据处理:动态数据分析报表、单元格数字格式、使用排序工具

1、在生成数据透视表之后选中一个单元格&#xff0c;点击插入&#xff0c;在图表中选择一个自己想要的图表。&#xff08;生成可视化的图表&#xff09; 2、在分析中找到切片器&#xff0c;通过点击切片器可以即时变换生成不同的可视化图&#xff0c;可以右键切片器选择关联两个…

matlab 对数坐标画图,及在曲线上加竖直线

matlab 对数坐标画图 方法一&#xff1a;直接对x、y值取对数&#xff0c;然后画图 plot(log(x), log(y), m, LineWidth,1, Marker,.);% ,Color,#EDB120 方法二&#xff1a;将x、y轴刻度改为对数形式 plot(x, y, r, LineWidth,1, Marker,); ax gca();% 获取当前坐标句柄 ax…

解决Oracle锁表的方法

在实际工作中&#xff0c;并发量比较大的项目&#xff0c;经常会出现锁表的问题&#xff0c;下面我将复现这个问题&#xff0c;并给出解决方法。 一、问题复现 1、session1修改aabb表的B字段为迪迦奥特曼&#xff0c;但是不提交该事务。 2、session2也修改这行的这个字段。 发…

【stomp实战】搭建一套websocket推送平台

前面几个小节我们已经学习了stomp协议&#xff0c;了解了stomp客户端的用法&#xff0c;并且搭建了一个小的后台demo&#xff0c;前端页面通过html页面与后端服务建立WebSocket连接。发送消息给后端服务。后端服务将消息内容原样送回。通过这个demo我们学习了前端stomp客户端的…

【leetcode面试经典150题】71. 对称二叉树(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

科技改变视听4K 120HZ高刷新率的投影、电视、电影终有用武之地

早在1888年&#xff0c;法国生理学家埃蒂安朱尔马莱就发明了一套盒式摄像机&#xff0c;能以120帧/s的速度在一条纸膜上曝光照片&#xff0c;但是当时没有相匹配的放映设备。而马莱的另一套拍摄设备是60帧/s的规格&#xff0c;并且图像质量非常好。 受此启发&#xff0c;雷诺的…

Linux上部署Jupyter notebook

安装jupyter notebook pip install notebook #或者 conda install notebook配置 jupyter notebook --generate-config## The IP address the notebook server will listen on. # Default: localhost # 设置可以访问的ip, 默认是localhost, 将其改为 * c.NotebookApp.ip *#…

AutoGPT-Forge使用教程,自行构建agent智能体

本博客给出AutoGPT-forge四个教程的翻译与理解&#xff0c;使用GPT4翻译&#xff0c; 参考官方教程https://aiedge.medium.com/autogpt-forge-a-comprehensive-guide-to-your-first-steps-a1dfdf46e3b4 使用AutoGPT Github代码日期2024/4/22&#xff1b; 博客开始编辑日期20…

java和python刷题的一些语法规则总结(未完成)

语法总结 Java篇1、代码补全2、编程题中常用头文件3、编程题常用的内置方法4、模版 Python篇1、2、编程题中常用的头文件3、编程题中常用的内置方法4、伪代码模版 去哪练习&#xff1f; 1、LeetCode上有个面试模拟 2、牛客公司真题&#xff08;ACM模式&#xff09; ⚠️ 笔试均…

Android Gradle查看依赖库

1.gradle :app:dependencies 输出列表展示了所有configuration下的依赖树&#xff0c;依赖关系明显&#xff0c;层次清晰。 2.日志太长可以写入本地文件gradle :app:dependencies > D:/log.txt 3.gradlew processReleaseManifest --stacktrace 跟踪具体报错文件 注…

解决Android studio更换sdk地址后flutter项目显示no device selected

问题描述 因为之前sdk的路径在c盘上,经常在更新或下在sdk后c盘饱满,于是就更换了sdk的路径,更换sdk路径后就导致flutter项目在选择设备的时候出现no device selected 找不到设备,但是在device Manager可以看到物理设备或者是虚拟设备。如下图所示。 问题分析 导致这个问题…

python 报错:ImportError: cannot import name ‘kaiser‘ from ‘scipy.signal‘

python 报错&#xff1a;ImportError: cannot import name kaiser from scipy.signal 介绍第一步&#xff1a;第二步&#xff1a;最终结果&#xff1a; 介绍 这个错误表明在导入 scipy.signal 模块时出现了问题&#xff0c;因为无法找到 kaiser 函数。可能的原因是 scipy 库没有…

C语言 | Leetcode C语言题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; int* vis;void backtrack(int* nums, int numSize, int** ans, int* ansSize, int idx, int* perm) {if (idx numSize) {int* tmp malloc(sizeof(int) * numSize);memcpy(tmp, perm, sizeof(int) * numSize);ans[(*ansSize)] tmp;return…

什么样的汽车制造供应商管理平台 可以既高效又安全?

汽车制造供应商管理是汽车制造商最基础的工作项&#xff0c;因为在汽车制造环节&#xff0c;与供应商间存在着必不可少又高频的业务往来&#xff0c;而在汽车制造供应商之间&#xff0c;文件往来是确保业务顺利进行、沟通协作和质量控制的重要环节。这些文件往来涵盖了多个方面…