使用@ConfigurationProperties实现类型安全的配置过程
作者:思影影思 发布时间:2023-07-01 00:26:05
@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();
}
}
来源:https://blog.csdn.net/lk142500/article/details/88932610
猜你喜欢
- 最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能。一、验证码生成类生成验证码的话需要用到java的Graphics类库,
- 1. 什么是JvmJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来
- 一、创建项目1.File->new->project;2.选择“Spring Initializr”,点击next;(jdk1.
- 因为涉及到 io 流输入问题,如果不关闭会一直占用资源。所以使用过后要及时关闭,防止资源一直被占用。Scanner在使用前要导入 java.
- Android之文件数据存储一、文件保存数据介绍Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的
- 因为系统的菜单列表是不轻易改变的,所以不需要在每次请求的时候都去查询数据库,所以,在第一次根据用户id请求到菜单列表的时候,可以把菜单列表的
- 本文针对java * 进行知识点整理,具体内容如下一. JAVA的 * (比较官方说法) 代理模式是常用的java设计模式,他的特征是代
- 本文实例讲述了JAVA+Struts2获取服务器地址的方法。分享给大家供大家参考。具体实现方法如下:HttpServletRequest r
- Java内存区域与内存溢出异常概述对于 C 和 C++程序开发的开发人员来说,在内存管理领域,程序员对内存拥有绝对的使用权,但是也要主要到正
- Springboot根据配置文件动态注入接口实现类需求最近在做一个Springboot项目,需要面向不同需求的客户,但是为了方便管理分支,需
- 本文以eclipse4.7安装sts3.9.0为例,解决报错An error occurred while collecting items
- 背景最近在研究搭建spring源码调试环境时,接触到到gradle项目构建工具。由于之前习惯于maven项目的构建,故通过此文记录相关gra
- 1.mybatis对多语句类型的支持在mybatis映射文件中传参数,主要用到#{} 或者 ${}.#{}:表示使用这种符号的变量会以预编译
- 原因分析@Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null在使用springboot的自定带的
- 文章来源:csdn 作者:chensheng913对于Java语言,最体贴的一项设计就是它并没有打算让人们为了写程序而写程序——人们也需要考
- 一、 进程 简单来说,进程是对资源的抽象,是资源的容器,
- 轨迹压缩算法场景描述给定一个GPS数据记录文件,每条记录包含经度和维度两个坐标字段,根据距离阈值压缩记录,将过滤后的所有记录的经纬度坐标构成
- JVM内存模型/内存空间Java虚拟机JVM运行起来,就会给内存划分空间,这块空间成为运行时数据区。运行时数据区主要划分为以下 6
- java语言是一种面向对象的程序设计语言吗java语言是面向对象的程序设计语言支持部分或绝大部分面向对象特性(类和实例、封装性、继承、多态)
- 本文实例为大家分享了AJAX二级联动效果的具体代码,供大家参考,具体内容如下Ajax.jsvar createAjax = function