迅速学会@ConfigurationProperties的使用操作

下面我将为您详细讲解“迅速学会@ConfigurationProperties的使用操作”的完整攻略。

什么是@ConfigurationProperties

@ConfigurationProperties是Spring Boot提供的一种读取properties配置文件的注解。通过在类上添加此注解,可以将属性值自动绑定到该类的对应字段上,并且可以对属性值进行校验和自动装配等操作。

如何使用@ConfigurationProperties

使用@ConfigurationProperties只需要两个步骤:

  1. 创建一个类,用于存储要读取的属性及其对应的值,并使用@ConfigurationProperties注解标注该类。
@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    private String title;
    private String description;
    // getter和setter方法略
}
  1. 在application.properties文件中设置要读取的属性值,并将该类注入到Spring容器中即可使用。
example.title=example-title
example.description=example-description
@RestController
@EnableConfigurationProperties(ExampleProperties.class)
public class ExampleController {

    private final ExampleProperties exampleProperties;

    @Autowired
    public ExampleController(ExampleProperties exampleProperties) {
        this.exampleProperties = exampleProperties;
    }

    @GetMapping("/example")
    public String example() {
        return String.format("title: %s, description: %s", 
              exampleProperties.getTitle(), exampleProperties.getDescription());
    }
}

高级用法

除了基本用法外,@ConfigurationProperties还可以进行一些高级操作,例如:

类型安全的读取配置

通过在配置类的字段上添加@Valid或@Validated注解,可以对配置的字段进行类型校验,确保属性值的类型与配置类中的类型匹配。

@ConfigurationProperties(prefix = "example")
@Validated
public class ExampleProperties {
    @Pattern(regexp = "^\\d{11}$", message = "手机号格式不正确")
    private String phone;
    // getter和setter方法略
}
example.phone=12345678901

复杂属性的读取配置

对于复杂的属性,我们可以使用NestedConfigurationProperty注解,将其封装成一个嵌套类,从而实现更加灵活的配置。

@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    private String title;
    private String description;
    private Author author;
    // getter和setter方法略

    public static class Author {
        private String name;
        private String email;
        // getter和setter方法略
    }
}
example.title=example-title
example.description=example-description
example.author.name=example-author-name
example.author.email=example-author-email

配置属性的加载顺序

在多个配置文件中,可能存在同名的属性,在读取属性时,Spring Boot会按照固定的顺序进行读取。

  1. 命令行参数
  2. System.getProperties()中的属性
  3. OS环境变量中的属性
  4. 随机值
  5. application.properties或application.yml({@link ApplicationContext} 启动后被载入的外部属性源)
  6. @PropertySource 注解声明的配置文件
  7. 通过Spring的接口Environment.getAdditionalPropertySources()方法添加的额外属性源

示例说明

下面我们通过两个示例说明@ConfigurationProperties的使用方法:

示例一:读取单一属性

  1. 创建一个应用,引入依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.5</version>
    </dependency>
</dependencies>
  1. 创建一个配置类SinglePropertyProperties.java:
@ConfigurationProperties(prefix = "single.property")
public class SinglePropertyProperties {
    private String value;
    // getter和setter方法略
}
  1. 在application.properties文件中添加配置:
single.property.value=example value
  1. 创建一个web控制器SinglePropertyController.java:
@RestController
@EnableConfigurationProperties(SinglePropertyProperties.class)
public class SinglePropertyController {

    private final SinglePropertyProperties singlePropertyProperties;

    @Autowired
    public SinglePropertyController(SinglePropertyProperties singlePropertyProperties) {
        this.singlePropertyProperties = singlePropertyProperties;
    }

    @GetMapping("/single-property")
    public String singleProperty() {
        return singlePropertyProperties.getValue();
    }
}
  1. 启动应用,访问http://localhost:8080/single-property可以看到反馈“example value”,即说明读取单一属性成功。

示例二:读取嵌套属性

  1. 创建一个应用,引入依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.5</version>
    </dependency>
</dependencies>
  1. 创建一个配置类NestedProperties.java:
@ConfigurationProperties(prefix = "nested.property")
public class NestedProperties {
    private String parentValue;
    private ChildProperties child;
    // getter和setter方法略

    public static class ChildProperties {
        private String childValue;
        // getter和setter方法略
    }
}
  1. 在application.properties文件中添加配置:
nested.property.parent-value=example parent value
nested.property.child.child-value=example child value
  1. 创建一个web控制器NestedController.java:
@RestController
@EnableConfigurationProperties(NestedProperties.class)
public class NestedController {

    private final NestedProperties nestedProperties;

    @Autowired
    public NestedController(NestedProperties nestedProperties) {
        this.nestedProperties = nestedProperties;
    }

    @GetMapping("/nested-property")
    public String nestedProperty() {
        return String.format("parentValue: %s, childValue: %s",
                nestedProperties.getParentValue(), nestedProperties.getChild().getChildValue());
    }
}
  1. 启动应用,访问http://localhost:8080/nested-property可以看到反馈“parentValue: example parent value, childValue: example child value”,即说明读取嵌套属性成功。

通过以上例子,您应该已经掌握了@ConfigurationProperties的基本使用和高级用法,可以通过读取外部properties属性来动态配置应用程序了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:迅速学会@ConfigurationProperties的使用操作 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Java运算符从见过到掌握上

    Java运算符是Java语言中非常重要的一个概念。它是程序员进行各种运算操作所必需的。从见过到掌握,需要我们经过以下步骤: 一、了解Java运算符的分类 Java运算符包括算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和三目运算符。 算术运算符:+,-,*,/,%,++,–。 赋值运算符:=,+=,-=,*=,/=,%=等等。 比较运算符:==,…

    Java 2023年5月20日
    00
  • Java线程之程安全与不安全代码示例

    我来详细讲解一下“Java线程之程安全与不安全代码示例”的完整攻略。 程序设计中的线程安全性 当我们在写多线程程序时,需要考虑一个非常重要的问题,那就是线程安全性。所谓线程安全,就是指当多个线程同时访问同一份数据时,能够保证数据的正确性和一致性。 线程安全性对于程序的正确性非常关键,如果程序中存在不安全的非线程安全代码,可能会造成意想不到的隐患,例如数据损坏…

    Java 2023年5月20日
    00
  • 详解Javascript获取缓存和清除缓存API

    详解Javascript获取缓存和清除缓存API 什么是浏览器缓存? 浏览器缓存是浏览器对于静态资源(例如图片、CSS、js等文件)在第一次请求后会将它们缓存起来,当再次请求相同的资源时,浏览器会直接从缓存中加载,可以加快页面的加载速度,减少服务器的负载压力。 如何获取浏览器缓存? 在Javascript中,可以使用以下代码来获取浏览器缓存的信息: if(w…

    Java 2023年6月15日
    00
  • 深入了解Java中finalize方法的作用和底层原理

    深入了解Java中finalize方法的作用和底层原理 简介 Java的finalize方法是Object类中定义的一种方法,用于垃圾回收器执行回收对象之前进行调用,即在对象被标记为垃圾之前进行任意的资源清理工作或其他必要的操作。本文将介绍finalize的作用和底层原理,并通过示例说明。 finalize方法的作用 finalize方法被设计用于执行垃圾回…

    Java 2023年5月26日
    00
  • 深入理解Spring Cache框架

    关于“深入理解Spring Cache框架”的完整攻略,我会从以下几个方面进行详细讲解: Spring Cache框架的概念及应用场景 Spring Cache框架的核心组件 Spring Cache框架的使用方法和注意事项 两条示例,演示Spring Cache的具体使用 1. Spring Cache框架的概念及应用场景 Spring Cache框架是S…

    Java 2023年5月19日
    00
  • Maven的安装配置详解

    Maven的安装配置详解 Maven是一种项目管理工具,它可以自动化构建过程并管理项目的依赖关系。Maven使用XML描述项目,使用“pom.xml”文件配置项目的基本信息、依赖以及构建方式。 本文将详细讲解Maven的安装和配置步骤。 安装Maven 访问Maven官网https://maven.apache.org/,下载最新的Maven版本(目前是3.…

    Java 2023年6月2日
    00
  • Java中关于String StringBuffer StringBuilder特性深度解析

    Java中关于String StringBuffer StringBuilder特性深度解析 Java中有三种处理字符串的方式,分别是使用String、StringBuffer和StringBuilder类。这三种类在处理字符串时具有不同的特点和性能表现,下面将详细解析每个类的特性。 String类 String是Java中最常用的字符串处理类,它是一个不可…

    Java 2023年5月20日
    00
  • java 数值类型分秒时间格式化的实例代码

    让我来为你详细讲解一下“Java数值类型分秒时间格式化的实例代码”的攻略。 一、需求分析 在进行实例编写前,我们先来分析一下需求: 我们需要实现一个功能能够将时间以及数值类型的分秒转化成如下格式:mm:ss,例如:将80秒转化成01:20,将150秒转化成02:30等。 二、实现思路 基于上面的需求,我们大概可以想到以下的实现思路: 通过对秒数的模运算来计算…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部