我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用@ConfigurationProperties实现类型安全的配置过程

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用@ConfigurationProperties实现类型安全的配置过程

@ConfigurationProperties实现类型安全的配置

问题描述

从之前@Value的使用,可以知道@Value可以灵活的把配置文件中的键值对的值注入到Bean中供我们使用,已经很灵活了,但这还不够,比如下述的application.properties

tomcat.ip=192.168.1.110
tomcat.port=8787
tomcat.projectName=screenshot
tomcat.userName=admin
tomcat.password=admin

如果也要按照之前的描述,使用@value就要填写5次,这显然令人惆怅,在程序员的世界里,所有重复性的工作都应该被取代,因此Spring Boot为我们提供了@ConfigurationProperties注解。

实践

application.properties

tomcat.ip=192.168.1.110
tomcat.port=8787
tomcat.projectName=screenshot

从上述的配置项中,可以看到明显的相似性,即这一簇配置均以tomcat开始,类似String类中的startWith函数。

核心代码

package com.wisely.ch6_2_3.config;

import lombok.Getter;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "tomcat") //1
@Log4j
public class TomcatSetting {
    @Getter
    @Setter
    private String ip;
    @Getter
    @Setter
    private int port;
    @Getter
    @Setter
    private String projectName;

    public String getUrl() {
        return "http://"+getIp()+"/"+getPort()+"/"+getProjectName();
    }

}

通过这种方法,即可实现一次性注入相似的配置,非常方便。

减少了重复性工作,即提高优雅度,也能减少错误,很酷。

关于ConfigurationProperties注解的说明

下文笔者讲述Spring Boot中ConfigurationProperties注解的相关说明

如下所示:

我们都知道在Spring中,可以使用@Value对单个属性进行注入配置操作

但是很多配置都具有一定的层级,那么此时Spring提供了一个基于层级配置的注解

如下所示:

@ConfigurationProperties注解的功能:

  • 将properties属性和一个Bean及其属性关联
  • 从而实现类型安全配置

例:

@ConfigurationProperties加载properties文件内的配置 使用prefix属性指定配置文件中定义的properties配置的统一前缀

@ConfigurationProperties(prefix = "remote"})  

---Spring Boot1.5之前,使用以下配置指定properties文件的位置

@ConfigurationProperties(prefix = "remote",locations={"classpath:remote.properties"}) 

示例代码如下:

remote.address= www.java265.com
remote.port= 9090

 
@Component
@PropertySource({"classpath:remote.properties"})
@ConfigurationProperties(prefix = "remote")
public class RemoteConfig {
    
    private String address;
    private int port;
    // getter/stetter方法
}

对应RemoteConfig的Bean的使用:

@RestController
public class ConfigurationController {
    @Resource
    private RemoteConfig remoteConfig;
    @GetMapping
    public void getInfo() {
        System.out.println("地址:" + remoteConfig.getAddress());
        System.out.println("端口:" + remoteConfig.getPort());
    }
}

//测试
@SpringBootTest
@AutoConfigureMockMvc
class ConfigurationControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    void getInfo() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/"));
    }
}

-----运行以上代码,将输出以下信息------
地址:www.java265.com
端口:9090

例:

@ConfigurationProperties注解应用于Bean方法上的示例分享

例:

@Configuration
public class MyConfig {
    @Bean
    @ConfigurationProperties(prefix = "user")
    public User user() {
        return new User();
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

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

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

使用@ConfigurationProperties实现类型安全的配置过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用@ConfigurationProperties实现类型安全的配置过程

这篇文章主要介绍了使用@ConfigurationProperties实现类型安全的配置过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-13

如何使用TypeScript实现一个类型安全的EventBus

这篇文章主要介绍“如何使用TypeScript实现一个类型安全的EventBus”,在日常操作中,相信很多人在如何使用TypeScript实现一个类型安全的EventBus问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
2023-07-02

Springboot使用docker-compose实现动态配置过程

这篇文章主要介绍了Springboot使用docker-compose实现动态配置全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-19

安装nvm并使用nvm安装nodejs及配置环境变量的全过程

有时候使用nvm管理node会发现无法使用node或npm,主要原因是环境变量没有配置成功,下面这篇文章主要给大家介绍了关于安装nvm并使用nvm安装nodejs及配置环境变量的相关资料,需要的朋友可以参考下
2023-03-19

使用docker安装hadoop的实现过程

这篇文章主要介绍了使用docker安装hadoop的详细过程,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-30

信息安全工程师网络安全产品的配置与使用考点

  信息安全工程师网络安全产品的配置与使用考点有哪些?为了方便考生及时有效的备考,编程学习网小编为大家精心整理了软考信息安全工程师网络安全产品的配置与使用考试知识点,供大家参考和学习。如想获取更多计算机软件水平考试的模拟题及备考资料,请关注编程学习网网站的更新。  【考法分析】  本考点主要是对网络安全产品的配置相关内容进行考
信息安全工程师网络安全产品的配置与使用考点
2024-04-18

Java中使用ConcurrentHashMap实现线程安全的Map

在Java中,ConcurrentHashMap是一种线程安全的哈希表,可用于实现多线程环境下的Map操作。它支持高并发的读写操作,通过分段锁的方式实现线程安全,同时提供了一些高级功能,比如迭代器弱一致性和批量操作等。ConcurrentHashMap在高并发场景中具有重要的应用价值
2023-05-17

信息安全工程师信息系统安全产品的配置与使用考点

  信息安全工程师信息系统安全产品的配置与使用考点有哪些?为了方便考生及时有效的备考,编程学习网小编为大家精心整理了软考信息安全工程师信息系统安全产品的配置与使用考试知识点,供大家参考和学习。如想获取更多计算机软件水平考试的模拟题及备考资料,请关注编程学习网网站的更新。  【考法分析】  本考点主要是对信息系统安全产品的配置与
信息安全工程师信息系统安全产品的配置与使用考点
2024-04-18

Go中使用sync.Map实现线程安全的缓存

在本文中,我们展示了如何使用sync.Map包在Go中实现一个简单、线程安全的缓存。
Go缓存2024-11-30

使用Vue3+ElementPlus前端实现分片上传的全过程

ElementPlus是一套为开发者、设计师和产品经理准备的基于Vue 3.0的组件库,提供了配套设计资源,帮助你的网站快速成型,下面这篇文章主要给大家介绍了关于使用Vue3+ElementPlus前端实现分片上传的相关资料,需要的朋友可以参考下
2022-11-13

信息安全工程师考试知识点:网络安全产品的配置与使用

  信息安全工程师考试知识点有哪些?今天编程学习网小编为大家整理了信息安全工程师考试知识点:网络安全产品的配置与使用,供大家备考复习。  【考法分析】  本考点主要是对网络安全产品的配置相关内容进行考查。  【要点分析】  1.网络流量状况是网络中的重要信息,可以实现如下目标:负载检测;性能分析;网络纠错;网络优化;业务质
信息安全工程师考试知识点:网络安全产品的配置与使用
2024-04-18

用 TypeScript 实现类型安全的 EventEmitter,这下不用怕写错事件名了

配合越来越流行的 TypeScript,我们可以通过安装 @types/node,我们能够进一步获得类型能力,减少低级错误的出现。但 EventEmitter 的类型实现并不出色,称不上是类型安全。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录