使用@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

标签:@ConfigurationProperties,类型安全,配置
0
投稿

猜你喜欢

  • 代码从windows下visual studio到andriod平台迁移实现步骤

    2022-05-23 11:21:39
  • Java模拟实现斗地主发牌

    2022-07-09 02:16:52
  • Spring事务注解@Transactional失效的八种场景分析

    2022-03-09 13:36:13
  • 基于Springboot一个注解搞定数据字典的实践方案

    2022-12-23 01:12:38
  • Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    2021-07-19 04:41:18
  • java ThreadPool线程池的使用,线程池工具类用法说明

    2023-06-23 18:12:12
  • SpringCloud Eureka搭建的方法步骤

    2021-10-10 11:03:29
  • C#接口在派生类和外部类中的调用方法示例

    2021-06-13 07:54:43
  • C++详细讲解继承与虚继承实现

    2022-10-25 18:33:49
  • 如何自定义hibernate validation注解示例代码

    2021-08-31 12:05:51
  • springMVC实现前台带进度条文件上传的示例代码

    2021-09-15 17:24:44
  • C# 读写自定义的Config文件的实现方法

    2022-09-08 23:22:35
  • java发送kafka事务消息的实现方法

    2022-05-17 01:18:35
  • 第三方包jintellitype实现Java设置全局热键

    2023-09-25 10:33:50
  • android调用国家气象局天气预报接口json数据格式解释

    2022-09-16 21:08:24
  • Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法

    2023-06-30 02:16:15
  • Java与C++实现相同的MD5加密算法简单实例

    2023-08-31 09:43:02
  • SpringBoot如何实现定时任务示例详解

    2023-10-11 23:24:42
  • Android RecyclerView 上拉加载更多及下拉刷新功能的实现方法

    2021-10-06 22:37:24
  • C# 函数返回多个值的方法详情

    2022-01-05 05:47:11
  • asp之家 软件编程 m.aspxhome.com