【微服务~原始真解】Spring Cloud —— 配置绑定和配置属性校验

这篇具有很好参考价值的文章主要介绍了【微服务~原始真解】Spring Cloud —— 配置绑定和配置属性校验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

springcloud 校验 实体中一个参数,云原生,spring boot,微服务

🔎这里是【秒懂·云原生】,关注我学习云原生不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。

👀本期介绍

主要介绍Spring Cloud —— 配置绑定和配置属性校验

配置绑定

所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常,我们会把一些配置信息(例如,数据库配置)放在配置文件中,然后通过 Java 代码去读取该配置文件,并且把配置文件中指定的配置封装到 JavaBean(实体类) 中。
SpringBoot 提供了以下 2 种方式进行配置绑定:

  • 使用 @ConfigurationProperties 注解
  • 使用 @Value 注解

先建立数据配置文件

application.yml

sb:
  port: 8086
  username: 'abc \n hello' #字符串 
  password: 6564321 #字符串 
  birthday: 2011/12/23 #日期 
  books: #map 
    jsp: 36 
    html: 78 
    spring: 78 
  books2: {jsp: 56,spring: 65,mybatis: 98} #map 行内 
  person: #javabean 
    name: abc 
    age: 23 
  person2: {name: lily, age: 36 } #javabean行内 
  hobby: #数组 
    - jsp 
    - hibernate 
    - spring 
    - mybatis 
  list: # list集合 
    - 32 
    - 65
    - 98 
  set: #set 集合 
    - hello 
    - world 
  hobby2: [23,45,56] #数组 list set 行内 
  mapList: # 数组 list set 里存map 
    - jsp: 36 
      hibernate: 58 
    - html: 65 
      css: 98 
      js: 65
    - {vue: 36,react: 98}

@ConfigurationProperties

通过 Spring Boot 提供的 @ConfigurationProperties 注解,可以将全局配置文件中的配置数据绑定到 JavaBean 中。
DbConfig.java

@Configuration 
@ConfigurationProperties(prefix = "sb") 
public class DbConfig { 
String username; 
String password; 
Date birthday;
Map books;
Person person;
Map books2;
Person person2;
String [] hobby;
List list;
Set set ;
int [] hobby2;
List<Map> mapList;
       /************省略geter/seter方法*************/ 
       }

只有在容器中的组件,才会拥有 SpringBoot 提供的强大功能。如
果我们想要使用 @ConfigurationProperties 注解进行配置绑定,
那么首先就要保证该对 JavaBean 对象在 IoC 容器中,所以需要用
到 @Configuration 注解来添加组件到容器中。
JavaBean 上使用了注解 @ConfigurationProperties(prefix = “sb”)
,它表示将这个 JavaBean 中的所有属性与配置文件中以“sb”为前
缀的配置进行绑定。

@Value

@Value的作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。 @Value的值有两类:
① ${property : default_value }
② #{ obj.property? :default_value }
第一个注入的是外部配置文件对应的property,第二个则是SpEL表达式对应的内容。
default_value,就是前面的值为空时的默认值。注意二者的不同,#{}里面那个obj代表对象。

也就是说@Value注解有两种用法,一种是@Value(“${}”)和@Value(“#{}”),搞清楚分类后我们一一来分析。

第一种 @Value(“${}”)

controller层代码:

@RestController
@RequestMapping("/test")
public class ValueController {

    @Autowired
    private CarpollingService carpollingService;

    @GetMapping("/getValue")
    public String getValue(){
        return carpollingService.getValue();
    }
}

配置类代码:

@Configuration 
public class CarpollingServiceImpl {

    @Value("${db.port}")
    private String port;

    @Override
    public String getValue() {
        return port;
    }
}

springcloud 校验 实体中一个参数,云原生,spring boot,微服务

第二种@Value(“#{}”)

注意: #{}是不能以第一种方式来进行取值,否则会报错

前面已经说了,#{}里面包含的是obj,所以需要配合bean来使用,现在创建一个UserBean,并且给某个字段加上@Value(“#{}”)注解(按自己的需求任意添加注解)

UserBean类代码:

@Data
@Component//添加component注解,使其注册进容器,交由容器进行管理
public class UserBean {

    private String name="张三";}

controller层代码:

@RestController
@RequestMapping("/test")
public class ValueController {

       @Autowired
    CarpollingServiceImpl carpollingService;

    @GetMapping("/getValue")
    public String getValue(){
        return carpollingService.getValue();
    }
}

配置类代码:

@Configuration
public class CarpollingServiceImpl {

    @Value("#{userBean.name}")
    private String port;

    public String getValue() {
        return port;
    }
}

springcloud 校验 实体中一个参数,云原生,spring boot,微服务

@PropertySource

如果将所有的配置都集中到 application.properties 或 application.yml
中,那么这个配置文件会十分的臃肿且难以维护,因此我们通常会将与Spring Boot 无关的配置(例如自定义配置)提取出来,写在一个单独的配置文件中,并在对应的 JavaBean 上使用 @PropertySource 注解指向该配置文件。

我们也可以自定义配置文件,例如新建 db.properties ,配置内容如下:

pro.username=admin 
pro.password=123456 
pro.birthday=2000/12/01 
pro.age=23 
pro.books={jsp:36,html:360,spring:65} 
pro.hobby=23,34 
pro.list=sprig,myatis 
pro.set=34,45,56

配置类:

@Component 
@PropertySource("classpath:db.properties") 
@Data 
public class User {
 @Value("${pro.username}") 
 String username; 
 @Value("${pro.password}") 
 String password; 
 @Value("${pro.birthday}") 
 Date birthday;
 }

注: 该注解只能引用properties文件

配置属性校验

自定义配置文件时,可以使用@Validated注解对注入的值进行一些简单的校验,示例代码:
Testconfig.java

@Validated
@Configuration
@ConfigurationProperties(prefix = "sb")
public class Testconfig {
    @Max(value = 123)
    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

测试
springcloud 校验 实体中一个参数,云原生,spring boot,微服务

 @Autowired
    Testconfig testconfig;

    @Test
    void a() {
        System.out.println(testconfig.getPassword());
    }

抛出错误,最大值不能超过123
springcloud 校验 实体中一个参数,云原生,spring boot,微服务

@Max(value = 123)注解会对注入的值进行校验,如果不是小于123的将会报错抛出
其它常见注解:
@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,
是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull 检查Null
@Past 检查日期
@Pattern(regex=,flag=) 正则
@Size(min=, max=) 字符串,集合,map限制大小
@Validate 对po实体类进行校验

上述的这些注解位于javax.validation.constraints包下, SpringBoot 2.3.0以后maven引用:

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

@Value 与 @ConfigurationProperties对比

@Value 和 @ConfigurationProperties 注解都能读取配置文件中的属性值并绑定到 JavaBean 中,但两者存在以下不同。

1. 使用位置不同

  • @ConfigurationProperties:标注在 JavaBean 的类名上;
  • @Value:标注在 JavaBean 的属性上。

2. 功能不同

  • @ConfigurationProperties:用于批量绑定配置文件中的配置;
  • @Value:只能一个一个的指定需要绑定的配置。

3. 松散绑定支持不同

@ConfigurationProperties:支持松散绑定(松散语法),例如实体类Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:

  • person.firstName
  • person.first-name
  • person.first_name
  • PERSON_FIRST_NAME

@Vaule:不支持松散绑定。

4. SpEL 支持不同

  • @ConfigurationProperties:不支持 SpEL 表达式;
  • @Value:支持 SpEL 表达式。

5. 复杂类型封装

  • @ConfigurationProperties:支持所有类型数据的封装,例如 Map、 List、Set、以及对象等;
  • @Value:支持基本数据类型的封装,例如字符串、布尔值、整数等类型, 对集合Map list set配置有要求

6.属性校验

  • @Value不支持属性校验
  • @ConfigurationProperties 支持属性校验

7. 应用场景不同

@Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

  • 若只是获取配置文件中的某项值,则推荐使用 @Value 注解;
  • 若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用 @ConfigurationProperties 注解。

我们在选用时,根据实际应用场景选择合适的注解能达到事半功倍的效
果。
springcloud 校验 实体中一个参数,云原生,spring boot,微服务

结束语🏆🏆🏆

🔥推荐一款模拟面试、刷题神器网站
点击注册即可
牛客刷题网
1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
3、大厂笔试真题:字节跳动、美团、百度、腾讯…
springcloud 校验 实体中一个参数,云原生,spring boot,微服务文章来源地址https://www.toymoban.com/news/detail-784484.html

到了这里,关于【微服务~原始真解】Spring Cloud —— 配置绑定和配置属性校验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Alibaba--Nacos服务注册和配置中心

    Nacos 是Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos的特性,官网解释如下: 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Age

    2024年02月05日
    浏览(39)
  • Spring Cloud ( openFeign 服务发现、配置、公共client抽取 )

    本章目录: openFeign的引出 快速入门 引入依赖 添加@EnableFeignClients注解 编写FeignClient接口 使用FeignClient中定义的方法代替RestTemplate 日志配置 连接池配置 公共client抽取 先来看我们之前服务通信使用的方法: 我们调用RestTemplate的getObject并手写url来完成服务调用,这样做的缺点是

    2023年04月08日
    浏览(32)
  • Spring Cloud Alibaba Nacos(服务注册及配置中心)

    Nacos是由阿里巴巴提供的一款专门构建云本地应用的 动态服务发现、配置中心和服务管理平台 。 在Spring Cloud Alibaba中常使用Nacos作为注册中心和分布式配置中心。  (1)服务发现和管理 动态服务发现是以服务为中心(例如微服务或云原生)体系结构的关键。Nacos支持基于DN

    2024年02月16日
    浏览(39)
  • Spring Cloud 实战系列之 Zuul 微服务网关搭建及配置

    用mavan搭建也可以。(重要的是后面pom里应该引入那些依赖,application.yml怎么配置) 由于开始构建项目时选择了Eureka Server,所以pom.xml中不需要手动添加依赖了 首先在启动类SpringcloudApplication中添加EurekaServer的注解:@EnableEurekaServer 访问注册中心:按照配置的端口号访问。我这

    2024年03月10日
    浏览(32)
  • 微服务Spring Cloud Config配置中心与RabbitMQ安装指南

    本文档详细描述了如何在Spring Cloud微服务架构中设置Config配置中心,将项目配置文件存储在Git服务器上(如GitHub或Gitee),并在微服务启动时从Config配置中心获取配置文件。同时,提供了RabbitMQ消息队列的安装指南,为微服务之间的通信提供可靠的消息传递机制。

    2024年02月11日
    浏览(35)
  • Spring Cloud Config配置服务及那些你不知道的坑

    目录 1、为什么选择Spring Cloud Config 1.1 集中式管理 1.2 动态修改配置 2、Spring Cloud Config 简介 3、服务端配置 3.1 添加依赖 3.2 开启服务注册 3.3 添加YML配置 3.4 创建远程分支及Profile配置文件 3.5 启动并测试服务 4、客户端配置 4.1 添加依赖 4.2 开启服务注册 4.3 添加YML配置 4.4 启动并

    2024年02月05日
    浏览(28)
  • day10-Spring Cloud Alibaba Nacos-服务注册与配置中心

    官网:https://github.com/alibaba/nacos,Nacos官方中文手册 Nacos:Spring Cloud Alibaba服务注册与配置中心(非常详细) (biancheng.net) Spring Cloud Alibaba系列-一文读懂Nacos原理 - 掘金 (juejin.cn) Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服

    2024年02月08日
    浏览(36)
  • 微服务 Spring Cloud 7,Nacos配置中心的Pull原理,附源码

    大家好,我是哪吒。 在单体服务时代,关于配置信息,管理一套配置文件即可。 而拆分成微服务之后,每一个系统都会有自己的配置,并且都各不相同,有些配置还需要动态改变,以达到动态降级、切流量、扩缩容等目的。 在Spring Boot开发中,可以把配置项放到config文件中

    2024年02月04日
    浏览(42)
  • Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心

    🏆作者简介: 哪吒 ,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 , 专注Java硬核干货分享,立志做到Java赛道全网Top N。 🏆本文收录于 Java基础教程系列(进阶篇) ,本专栏是针对大学生、初级Java工程师精心打造, 针对Java生态,逐个击破,

    2024年02月02日
    浏览(38)
  • Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

            前文讲解,完成了springboot、spring security、Oauth2.0的继承,实现了对系统资源的安全授权、允许获得授权的用户访问,也就是实现了单一系统的全部技术开发内容。         Springboot是微服务框架,单一系统只能完成指定系统的功能;那么多个单一系统是如何实现

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包