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

SpringBoot-配置文件

目录

配置文件

语法结构

基本语法

多个properties配置文件

激活指定配置文件

​在配置文件中指定 spring.profiles.active=dev

yml支持多文档块方式

运行测试

配置文件加载位置

获取配置文件中的数据

使用@Value注解

使用@ConfigurationProperties注解

@Value获取值和@ConfigurationProperties获取值比较

松散绑定

SpEL

JSR303数据校验

 依赖导入

Bean Validation 规范内嵌的约束注解


配置文件

        SpringBoot使用一个全局的配置文件,配置文件名是固定的application.propertiesapplication.yml)。
        配置文件的作用:修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好了。

语法结构

application.properties

语法结构 :key=value

server.port=8081

application.yml(推荐)

基本语法

  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 大小写敏感
  • 语法结构 :key:空格 value (空格不能省略)

server:
  port: 8081

application.yml 设置数据

YAML 支持的三种数据结构:

  • 字面量:单个的、不可再分的值
  • 对象:键值对的集合
  • 数组:一组按次序排列的值
server:port: 8081#普通key-value
name: 埼玉#对象
student:name: QiYuage: 3#对象行内写法
student: {name: QiYu,age: 3}#数组
pets:- cat- dog- pig#数组行内写法
pets1: [cat,dog,pig]

yaml可以直接给实体类赋值

person:name: 埼玉age: 3happy: truebirth: 2020/7/27maps: {k1: Flash,k2: King}lists:- code- musicdog:name: 波奇age: 3

多个properties配置文件

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

激活指定配置文件

​在配置文件中指定 spring.profiles.active=dev

application.properties:

server.port=8081
spring.profiles.active=dev

yml支持多文档块方式

spring:profiles:active: dev #指定属于哪个环境
---
server:port: 8083
spring:config:activate:on-profile: dev
---
server:port: 8084
spring:profiles: prod  #不推荐的写法

运行测试

配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

  • classpath:/config/
  • classpath:/


获取配置文件中的数据

使用@Value注解

在application.yaml中添加数据

dog:name: 波奇age: 3

将数据映射到Dog实体类中

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {@Value("${dog.name}")private String name;@Value("${dog.age}")private String age;
}

注意:导入@Value注解的包为:import org.springframework.beans.factory.annotation.Value;如果@Value提示错误很可能是导包错误。

运行测试,已将配置文件中的数据设置到实体类中

使用 @Value 注解有两点注意事项:

  • 对象要交给 Spring 容器管理,也就是需要在类上加 @Component 等注解;
  • 在静态变量上直接添加 @Value 注解是无效的。若要给静态变量赋值,可以在 set() 方法上加 @Value 注解。

使用@ConfigurationProperties注解

在application.yaml中添加数据

person:name: 埼玉age: 3happy: truebirth: 2020/7/27maps: {k1: Flash,k2: King}last-name: 光头披风侠lists:- code- musicdog:name: 波奇age: 3

使用注解将配置文件中的数据注入到实体类中(实体对象需要为Bean)

@ConfigurationProperties

编写Java实体类

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private String age;private Boolean happy;private Date birth;private Map<String,Object> maps;private List<String> lists;private Dog dog;
}

运行测试,数据导入成功

注意:注解的实体对象的属性名要和配置文件中的属性名相同,否则不能设置成功


@Value获取值和@ConfigurationProperties获取值比较

项目@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

注意:

  • 配置文件yml还是properties他们都能获取到值
  • 只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
  • 使用javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties

松散绑定

        yaml中写的last-name,这个和lastName是一样的“-”后面跟着的字母默认是大写的。这就是松散绑定。

在Person中加入lastName字段

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private String age;private Boolean happy;private Date birth;private Map<String,Object> maps;private String lastName;private List<String> lists;private Dog dog;
}

  在yaml文件中加入last-name: 光头披风侠字段

person:name: 埼玉age: 3happy: truebirth: 2020/7/27maps: {k1: Flash,k2: King}last-name: 光头披风侠lists:- code- musicdog:name: 波奇age: 3

测试成功


SpEL

        详细使用参考:Spring-SpEL表达式超级详细使用全解-CSDN博客


JSR303数据校验

  • JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation
  • Bean Validation 是一个运行时的数据验证框架,用于校验数据合规性。
 依赖导入
<!--引入validation的场景启动器-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Bean Validation 规范内嵌的约束注解
限制说明
@Null限制只能为null
@NotNull限制必须不为null
@AssertFalse限制必须为false
@AssertTrue限制必须为true
@DecimalMax(value)

限制必须为一个不大于指定值的数字

@DecimalMin(value)限制必须为一个不小于指定值的数字
@Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future限制必须是一个将来的日期
@Max(value)限制必须为一个不大于指定值的数字
@Min(value)限制必须为一个不小于指定值的数字
@Past限制必须是一个过去的日期
@Pattern(value)限制必须符合指定的正则表达式
@Size(max,min)限制字符长度必须在min到max之间
@Past验证注解的元素值(日期类型)比当前时间早
@NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

给对象添加校验注解

public class QiYu {private Integer id;@NotBlank(message = "名称不能为空")private String name;private Date data;@NotNull(message = "年龄不能为空")private Integer age;@Pattern(regexp = "[0-9]" ,  message = "参数格式错误")private String Telephone;
}

Controller 中需要校验的参数Bean前添加 @Validated开启校验功能,紧跟在校验的Bean后添加一个BindingResult,BindingResult封装了前面Bean的校验结果。

    @GetMapping("/validation")public String into(@Validated QiYu qiyu , BindingResult bindingResult) {if(bindingResult.hasErrors()){Map<String,String> map = new HashMap<>();bindingResult.getFieldErrors().forEach((item) ->{String msg = item.getDefaultMessage();String fie = item.getField();map.put(fie,msg);});return map.toString();}return "200";}

运行测试,由于QiYu对象属性未赋值所以会提示错误信息。

至此鸣谢:SpringBoot的配置【配置文件、加载顺序、配置原理】(超详细)_springboot component 和service那个先启动-CSDN博客Spring Boot 使用 JSR303(@Validated) 实现参数校验_validator对应springboot3版本-CSDN博客

相关文章:

  • Prometheus 架构及其特性
  • 图像形态学操作-腐蚀与膨胀,开运算和闭运算(含简单代码演示)
  • P2676 [USACO07DEC] Bookshelf B
  • MySQL重置密码终极版
  • 【Java高阶面经:缓存篇】35、 Redis单线程 vs Memcached多线程:高性能内存数据库设计解析
  • 阿里云OSS Api工具类不使用sdk
  • 通过 Terraform 构建您的第一个 Azure Linux 虚拟机
  • AWS EC2 使用Splunk DB connect 连接 RDS mysql
  • Missashe考研日记—Day44-Day50
  • 怎么判断文件是否支持多线程下载
  • orzdba.gz 下载解压使用教程:MySQL/InnoDB 监控命令参数详解与实战技巧
  • 优先级队列 模版题单
  • YOLOv8源码修改(5)- YOLO知识蒸馏(下)设置蒸馏超参数:以yolov8-pose为例
  • [C++] 洛谷B3959(GESP2024三月四级)做题
  • LLM多平台统一调用系统-LiteLLM概述
  • C++ 中的引用参数(Reference Parameter)‌
  • 【DeepSeek】计算机科学与技术专业的学习顺序
  • Vue3编译器:静态提升原理
  • 【Simulink】IEEE5/IEEE9/IEEE14/IEEE30/IEEE33/IEEE39仿真模型
  • 【Day36】
  • 做淘宝网站怎么弄的/站内搜索引擎
  • 买了一个域名如何做网站/爱站网ip反域名查询
  • 国外设计素材网站免费/营销型网站推广方案
  • 建设网站需要哪些费用/附近学电脑培训班
  • 建什么类型网站好/公司网页制作需要多少钱
  • 活动策划案模板/宁波seo网络推广公司排名