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

SpringBoot (六) 整合配置文件 @Value、ConfigurationProperties

哈喽,大家好,我是有勇气的牛排(全网同名)🐮🐮🐮

有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。

1 使用 @Value 注解

/** @Author  : 有勇气的牛排* @FileName: ReadProperties.java* desc     :* */package com.couragesteak.service;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ReadProperties {@Value("${cs.name}")private String name;@Value("${cs.star}")private String star;// http://127.0.0.1:8080/getProperties@RequestMapping("/getProperties")public String getProperties() {return name + ":" + star;}
}

2 使用 ConfigurationProperties

@ConfigurationProperties 加载配置通过 BeanPostProcessor实现,其对应的Bean的后置处理器为 ConfigurationPropertiesBindingPostProcessor,也就是在bean被实例化后,会调用后置处理器,递归的查找属性,通过反射机制注入值,因此需要提供getter和setter方法。

此外,针对此种属性注入的方式,SpringBoot支持 Relaxed Bingding,即秩序保证配置文件的属性和setter方法名相同即可。

注意事项

(1) 属性必须要有getter、setter方法
(2) 如果属性类型是集合,需要确保集合是不可变的。
(3) 如果使用Lombok自动生成 getter/setter方法,一定不要生成对应的任何构造函数,因为Spring IOC容器会自动使用它来实例化对象。
(4) 使用JavaBean属性绑定的方式只针对 标准Java Bean属性,不支持对静态属性的绑定。

配置文件

application.yml

cs:name: csstar: 9

2.1 Maven依赖

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

2.2 实体类

/** @Author  : 有勇气的牛排* @FileName: UserEntity.java* desc     :* */package com.couragesteak.entity;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "cs")
public class UserEntity {private String name;private String star;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getstar() {return star;}public void setstar(String star) {this.star = star;}@Overridepublic String toString() {return "UserEntity{" +"name='" + name + '\'' +", star='" + star + '\'' +'}';}
}

2.3 后端

/** @Author  : 有勇气的牛排* @FileName: ReadProperties_ConfigurationProperties.java* desc     : ConfigurationProperties 配置文件读取* */package com.couragesteak.service;import com.couragesteak.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ReadProperties_ConfigurationProperties {@Autowiredprivate UserEntity userEntity;//@RequestMapping("/getInfo")public String getInfo(String userName, Integer age){System.out.println("666");return userEntity.toString();}
}

注意事项

Spring考虑到带有注释@ConfigurationProperties的类可能不适合扫描(比如:我正在开发自己的自动配置或希望有条件地启用它们),所以Spring并不会自动扫描带有注释@ConfigurationProperties的类。

在这些情况下,推荐使用@EnableConfigurationProperties注解指定要处理的类型列表(即:将@ConfigurationProperties注释的类加到Spring IOC容器中)。一般通过将@EnableConfigurationProperties加在@Configuration类上完成。

3 @Value和@ConfigurationProperties的区别

(1) @ConfigurationProperties注解支持属性文件和javabean映射;而@Value支持spel表达式。

(2) @ConfigurationProperties注解支持全量的属性,宽松绑定方式;而@Vavlue只推荐使用标准的 kebab-case方式(仅使用小写字母和-),例如@Value("{demo.item-price}")可以提取demo.item-pricedemo-itemPrice

(3) 对于多个属性映射,并且属性尝尝被复用时,推荐使用@ConfigurationProperties;只读取单个属性使用@Value更加方便。

参考地址:

  • 余胜军
  • https://developer.aliyun.com/article/1058227
  • https://www.couragesteak.com/article/292
http://www.lryc.cn/news/30573.html

相关文章:

  • docker 入门篇
  • MapReduce的shuffle过程详解
  • 【软件使用】MarkText下载安装与汉化设置 (markdown快捷键收藏)
  • LeetCode笔记:Biweekly Contest 99
  • 初探富文本之CRDT协同实例
  • 团队死气沉沉?10种玩法激活你的项目团队拥有超强凝聚力
  • Spring三级缓存核心思想
  • 深度学习算法训练和部署流程介绍--让初学者一篇文章彻底理解算法训练和部署流程
  • 计算机网络整理
  • 闲人闲谈PS之三十八——混合制生产下WBS-BOM价格发布增强
  • Java 根类 Object
  • 04_Apache Pulsar的可视化监控管理、Apache Pulsar的可视化监控部署
  • 【算法】期末复盘,酒店住宿问题——勿向思想僵化前进
  • Java中的Comparator 与 Comparable详解
  • 计算机科学导论笔记(二)
  • GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音
  • 如何判断树莓派通过GPIO与5G模块成功连接?
  • Java——包装类和List及ArrayList
  • matlab - 程序流程控制、函数文件、特殊函数、调试与优化
  • Toponogov 比较定理及其应用
  • 力扣sql简单篇练习(二十二)
  • 【开源硬件】STM32F030R8T6系统板
  • ES之DSL查询文档基础查询
  • 数据结构与算法之堆排序
  • Vue3 中的模板语法
  • Redis十大类型——Hash常见操作
  • Python采集本地二手房,一键知晓上万房源信息
  • Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法(亲测有效)
  • Java文档搜索引擎总结
  • Linux内核学习笔记——页表的那些事。