【SpringBoot】一文了解SpringBoot配置高级

这篇具有很好参考价值的文章主要介绍了【SpringBoot】一文了解SpringBoot配置高级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌕博客x主页:己不由心王道长🌕!
🌎文章说明:SpringBoot配置高级🌎
✅系列专栏:SpringBoot
🌴本篇内容:关于bean属性绑定、松散绑定、bean校验和常用计量单位的应用🌴
☕️每日一语:后悔没有用、向前走,找不到方向也走☕️
🕤作者详情:作者是一名双非大三在校生,喜欢Java,欢迎大家探讨学习,喜欢的话请给博主一个三连鼓励。🕤
🚩 交流社区:己不由心王道长(优质编程社区)

前言

本文介绍的是SpringBoot配置高级部分,课程是跟着黑马走的,所以会有一些借鉴,当然也是笔记,还会参考一些大佬的分享;这里的SpringBoot配置高级,并不是SpringBoot所有的高级配置;SpringBoot体系(或者说Spring)是十分庞大的,笔者也自知不能穷尽,故而只能把所学的东西拿来记一记,练一练。文章内容如若有误,还请大家批评指正。

@ConfigurationProperties

@ConfigurationProperties告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;要进行绑定,首先这个类要受Spring管理,spring才能操作里面的数据。

使用场景

场景一:使用@ConfigurationProperties和@Component注解到bean定义类上.
注意,这里是到bean定义类上,这里的bean指的是受Spring管理的bean,而@Component注解就是把一个类当成一个bean注册到Spring容器中。
自定义一个配置文件:

book:
  bookName: Spring技术内幕
  price: 36.57

定义一个bean:

package com.example.entity;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

package com.example.entity;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author 不止于梦想
 * @date 2022/11/7 18:50
 */
@Component//交给Spring容器管理
@ConfigurationProperties(prefix = "book")//加载配置文件,配置前缀表达式
@Data
public class Book {
    //书名
    private String bookName;
    //价格
    private double price;
}


注意看,此时是有@Component注解的,说明这个bean受Spring容器管理。
测试:

package com.example.springbootconfigureadvanced;

import com.example.entity.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringBootConfigureAdvancedApplicationTests {
    @Autowired
    Book book;
    @Test
    void contextLoads() {
    }
    @Test
    public void toTest(){
        System.out.println(book.getPrice());
    }

}

结果:
【SpringBoot】一文了解SpringBoot配置高级
此时如果把@component去掉:
【SpringBoot】一文了解SpringBoot配置高级
直接爆红了,语法都不给你通过,这说明了要@ConfigurationProperties生效,被注入的bean应该要受Spring管理或者说在Spring容器中。

场景二:使用@ConfigurationProperties和@Bean注解在配置类的Bean定义方法上
解释一下:如果我们使用注解开发,一般会把第三方技术写成一个配置类,然后使用@ConfigurationProperties和@Bean注解对其进行注入,从而实现对第三方属性的绑定。
注意这里的两个注解使用在方法上,但是要绑定,这个类必须得让Spring管理,所以需要一个注解来显示这个类,让Spring能够扫描到,以便与可以把其添加到容器中。

新建一个配置类:

package com.example.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 不止于梦想
 * @date 2022/11/7 19:51
 */
@Configuration//声明一个类为配置类,用于取代bean.xml配置文件注册bean对象。
public class MyConfig {

    @ConfigurationProperties(prefix = "datasource")
    @Bean
    public DruidDataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

添加配置:

dataSource:
  url: jdbc:mysql://127.0.0.1:3306/springBoot?serverTimezone=UTC

注意这里并没有用spring.dataSource格式,如果是那样,倒不如直接在配置文件配好,瞎整配置类干啥。

测试:

package com.example;

import com.alibaba.druid.pool.DruidDataSource;
import com.example.entity.Book;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringBootConfigureAdvancedApplication {

    public static void main(String[] args) {
        //获取应用上下文配置
        ConfigurableApplicationContext context = SpringApplication.run(
                SpringBootConfigureAdvancedApplication.class, args);
        DruidDataSource dataSource = context.getBean(DruidDataSource.class);
        System.out.println(dataSource.getUrl());
    }

}

这里我们直接在SpringBoot应用类获取应用上下文配置即可获取容器中的bean,不用再费劲去测试类整一堆东西;
验证:
【SpringBoot】一文了解SpringBoot配置高级

解释一下,不然不清楚:在上面配置类MyConfig中设置了一个方法,返回值就是数据源对象,就是说使用方法创建了数据源对象,然后使用@Bean把这个方法定义为一个受Spring管理的bean,再使用@ConfigurationProperties(prefix = “datasource”)加载配置文件进入数据源对象,但是这样还不够,这个类Spring并不能扫描到,所以使用@Configuration把这个类定义为配置类,这样就可以加载这个类。

在这里没有的配置文件中的dataSource只是一个普通的配置。

场景三:使用@ConfigurationProperties注解到普通类,然后再通过@EnableConfigurationProperties定义为Bean。

先说一下@EnableConfigurationProperties的用法:这个注解相当于一个开关,用来开启配置的绑定,使用这个注解,不用把类手动交给Spring加载成bean,直接在这个注解后面加上你要开启配置的类的类名.class即可,这个注解会告诉Spring把类加载成bean,并放入容器中。

说白了就是让@ConfigurationProperties生效。

还是上面的例子:
没加@EnableConfigurationProperties、也没有加其他制成bean的注解:
【SpringBoot】一文了解SpringBoot配置高级
加上@EnableConfigurationProperties
测试:
【SpringBoot】一文了解SpringBoot配置高级

小结

1、注意三种使用情况,特别是第三种,在后面的原理篇会大量出现
2、@EnableConfigurationProperties是一个开关,用来开启被@ConfigurationProperties注解注释而没有其他生成bean注解的类与配置文件注入的开关。

宽松绑定/松散绑定

@ConfigurationProperties绑定属性支持属性名宽松绑定

总的概况就是,只要配置文件的配置的字母数量和字母与被绑定的bean的prefix(前缀)相同都可以绑定,但是注意,prefix的内容全部为小写。配置文件可以出现大小写不一致,甚至可以出现各种符号(非abcd这些)。

绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符

举例:配置文件

dataSource:
  url: jdbc:mysql://127.0.0.1:3306/springBoot?serverTimezone=UTC

类中:
【SpringBoot】一文了解SpringBoot配置高级
可以看到,虽然这里的前缀和配置文件完全相同,但是还是不正确的,prefix必须全为小写。
说完了吗?说完了,其他的试一下就可以,一通百通。
啊,还有就是:
宽松绑定不支持注解@Value引用单个属性的方式文章来源地址https://www.toymoban.com/news/detail-409317.html

到了这里,关于【SpringBoot】一文了解SpringBoot配置高级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 深入理解 SpringBoot 日志框架:从入门到高级应用——(七)SpringBoot日志配置

    SpringBoot 官方文档:https://docs.spring.io/spring-boot/docs/2.7.12/reference/htmlsingle Spring Boot 对所有内部日志记录使用 Commons Logging,但使底层日志实现保持为打开状态。 为 Java Util Logging、Log4J2 和 Logback 提供了默认配置。默认情况下,Logback、 Java Util Logging、Commons Logging、Log4J 或 SLF4J 都能

    2024年02月09日
    浏览(31)
  • SpringBoot 集成 Apollo 配置中心,一文搞定!(万字长文)

    由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。 1、背景 随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高,配置修改后实时生效,灰度发布,分环境、

    2024年02月21日
    浏览(37)
  • 深入理解 SpringBoot 日志框架:从入门到高级应用——(五)Log4j2配置文件详解

    Log4j2 官方文档:https://logging.apache.org/log4j/2.x/manual/index.html Log4j2 是一个Java日志框架,用于记录应用程序在运行时的信息。它是 Log4j 的升级版本,提供了更快的处理速度,更快的日志记录和更丰富的日志记录功能,并支持异步日志记录,减少了对应用程序性能的影响。它可以

    2024年02月05日
    浏览(45)
  • 一文了解大数据生态

    大数据一词最早指的是传统数据处理应用软件无法处理的过于庞大或过于复杂的数据集。 现在,对“大数据”一词的使用倾向于使用预测分析、用户行为分析或者其他一些从大数据中提取价值的高级数据分析方法,很少用于表示特定规模的数据集。 大数据是指规模巨大、种

    2024年02月22日
    浏览(39)
  • 一文了解Docker的用法

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似

    2024年02月11日
    浏览(40)
  • 一文了解什么是WebSocket

    WebSocket 允许我们创建“实时”应用程序,与传统 API 协议相比,该应用程序速度更快且开销更少。​ 一、 WebSocket 是如何工作的 按照传统的定义,WebSocket是一种双工协议,主要用于客户端-服务器通信通道。它本质上是双向的,这意味着通信在客户端与服务器之间来回发生。

    2024年02月07日
    浏览(33)
  • 一文了解RabbitMQ安装使用

            官网:Messaging that just works — RabbitMQ         RabbitMQ是一种开源的消息中间件软件,用于构建可扩展的分布式应用程序。它 实现了高级消息队列协议(AMQP) ,这是一种网络协议,用于在应用程序之间进行可靠的异步消息传递。         RabbitMQ提供了一个可靠的

    2024年02月13日
    浏览(38)
  • 【微服务】一文了解 Nacos

    Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石项目(完成微服务拆分和业务中台建设),成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。 随着云计算兴起, 2018 2018 2018 年 Nacos(阿里内部 Configserver/Diamond/ Vipserver 内核)开源,作为阿里十年

    2024年02月12日
    浏览(28)
  • 一文了解Validator库

    github.com/go-playground/validator 是一个 Go 语言的库,用于对结构体字段进行验证。它提供了一种简单而灵活的方式来定义验证规则,并在验证过程中检查结构体字段是否满足这些规则。这个库可以用于验证各种数据,包括从用户输入到 API 请求中的数据,以确保数据的完整性和有

    2024年02月10日
    浏览(27)
  • 一文深入了解Cmk

    定义:Cmk是德国汽车行业常采用的参数,是\\\"Machine Capability Index\\\" 的缩写,称为临界机器能力指数,它仅考虑设备本身的影响,同时考虑分布的平均值与规范中心值的偏移。由于仅考虑设备本身的影响,因此在采样时对其他因素要严加控制,尽量避免其他因素的干扰,计算公式

    2024年02月15日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包