文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot中怎么使用@ConfigurationProperties

2023-07-04 14:00

关注

这篇文章主要介绍“SpringBoot中怎么使用@ConfigurationProperties”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot中怎么使用@ConfigurationProperties”文章能帮助大家解决问题。

@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;@Component//交给Spring容器管理@ConfigurationProperties(prefix = "book")//加载配置文件,配置前缀表达式@Datapublic 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;@SpringBootTestclass SpringBootConfigureAdvancedApplicationTests {    @Autowired    Book book;    @Test    void contextLoads() {    }    @Test    public void toTest(){        System.out.println(book.getPrice());    }}

结果:

SpringBoot中怎么使用@ConfigurationProperties

此时如果把@component去掉:

SpringBoot中怎么使用@ConfigurationProperties

直接爆红了,语法都不给你通过,这说明了要@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;@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;@SpringBootApplicationpublic 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中怎么使用@ConfigurationProperties

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

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

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

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

说白了就是让@ConfigurationProperties生效。

还是上面的例子:

没加@EnableConfigurationProperties、也没有加其他制成bean的注解:

SpringBoot中怎么使用@ConfigurationProperties

加上@EnableConfigurationProperties

测试:

SpringBoot中怎么使用@ConfigurationProperties

小结

注意三种使用情况,特别是第三种,在后面的原理篇会大量出现

@EnableConfigurationProperties是一个开关,用来开启被@ConfigurationProperties注解注释而没有其他生成bean注解的类与配置文件注入的开关。

宽松绑定/松散绑定

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

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

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

举例:配置文件

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

类中:

SpringBoot中怎么使用@ConfigurationProperties

可以看到,虽然这里的前缀和配置文件完全相同,但是还是不正确的,prefix必须全为小写。

说完了吗?说完了,其他的试一下就可以,一通百通。

啊,还有就是:

宽松绑定不支持注解@Value引用单个属性的方式

关于“SpringBoot中怎么使用@ConfigurationProperties”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯