SpringBoot 自定义starter yaml提示失效问题及解决方法

方案概览:

在使用SpringBoot自定义starter时,我们经常需要使用application.yaml来为starter提供配置项,但是当我们在其他项目中使用自定义的starter时,IDE可能没有自动提示可用的yaml配置,这是一种很烦人的情况。这篇攻略将会解决这个问题。

解决方法:

在自定义starter的jar包中添加以下两个文件:

  1. META-INF/spring-configuration-metadata.json,用来自动生成yaml配置选项的元数据。

  2. META-INF/spring.factories,用来指定spring-boot-configuration-processor支持自定义starter的元数据。

具体步骤:

1.在starter项目中,添加如下代码依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

2.在starter项目的src/main/resources目录下新建spring.factories文件,并添加以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.demo.MyAutoConfiguration

其中,com.example.demo.MyAutoConfiguration是自定义starter的配置类。

3.为自定义starter的配置类添加@ConfigurationProperties注解和相关属性,例如:

@ConfigurationProperties("my.starter")
public class MyProperties {

    private String name;

    private Integer age;

    // Getters and setters
}

4.在自定义starter的src/main/resources目录下新建META-INF目录,并在其中创建spring-configuration-metadata.json文件,用来描述自定义配置类的yaml选项。例如:

{
  "properties": {
    "my.starter.name": {
      "type": "string",
      "description": "Name of the person."
    },
    "my.starter.age": {
      "type": "integer",
      "description": "Age of the person."
    }
  }
}

在上面的例子中,my.starter是配置类使用@ConfigurationProperties注解指定的前缀。

5.通过Maven构建自定义starter项目,将它发布到本地/远程仓库或直接引用它。

6.在其他项目中添加自定义starter的依赖,并在application.yaml中使用自定义starter的配置选项,例如:

my:
  starter:
    name: "John"
    age: 18

7.重启IDE,配置项将会被正确提示,并且提供了自定义starter的属性和描述。

示例说明:

以上的解决方案,我们可以通过Spring官方提供的Initializr创建一个SpringBoot项目,并为它添加一个自定义starter模块进行演示。

第一个示例使用简单的String类型配置项。

1.新建一个SpringBoot工程,并在它的pom.xml文件中添加自定义starter的依赖:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>demo-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

2.在工程的application.yaml文件中添加自定义starter的配置项:

my:
  starter:
    name: "John"

3.我们可以看到,在使用application.yaml文件中自定义starter配置的时候,相关配置项会被提供自动提示。

第二个示例使用自定义的对象类型配置项:

1.在自定义starter的配置类中添加对象类型的配置:

@ConfigurationProperties("my.starter")
public class MyProperties {

    private Person person;

    // Getters and setters
}

其中Person是一个普通的Java对象,例如:

public class Person {

    private String name;

    private Integer age;

    // Getters and setters
}

2.在自定义starter的src/main/resources/META-INF/spring-configuration-metadata.json文件中添加对象类型配置项的描述:

{
  "properties": {
    "my.starter.person": {
      "type": "object",
      "description": "My starter person.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the person."
        },
        "age": {
          "type": "integer",
          "description": "Age of the person."
        }
      }
    }
  }
}

3.在SpringBoot项目中添加自定义starter的依赖,并在application.yaml中添加对象类型的配置项:

my:
  starter:
    person:
      name: "John"
      age: 18

4.和前面的示例一样,在application.yaml文件中使用自定义starter配置的时候,相关配置项会被提供自动提示。

以上就是关于“SpringBoot 自定义starter yaml提示失效问题及解决方法”的攻略。通过上面的过程,大家可以再次体验到SpringBoot框架的强大之处,也为我们解决了一个重要问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 自定义starter yaml提示失效问题及解决方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • c#如何弹出输入框

    在C#中,可以使用多种方法来弹出输入框,例如使用MessageBox类、使用自定义对话框等。以下是弹出输入框的完整攻略: 使用MessageBox类弹出输入框 使用MessageBox类可以弹出带有文本和按钮的消息框其中包含一个文本框用于输入内容。以下是一个示例,演示如何使用MessageBox类弹出一个框: string input Microsoft.V…

    other 2023年5月7日
    00
  • IOS 使用Block二次封装AFNetworking 3.0详解

    IOS 使用Block二次封装AFNetworking 3.0详解 1. 前言 AFNetworking 是 iOS 开发中常用的网络请求库,其基于 NSURLConnection 和 NSURLSession,提供了更加简单方便的接口,使得开发者可以方便地进行网络请求。 但是,AFNetworking 中的回调方式为传统的代理方法,不够便捷。为此,我们可以…

    other 2023年6月25日
    00
  • 收藏的js表单验证控制代码大全

    收藏的js表单验证控制代码大全是一个包含多种 JavaScript 表单验证控制代码的合集,我们可以根据需要在项目中选择合适的代码进行使用,并且这些代码可以用来验证常规的表单字段,如文本框,密码框,文本区域和下拉列表等。 以下是使用该合集的步骤: 1. 下载代码合集 首先,我们需要从网络上下载收藏的js表单验证控制代码大全合集,可以在 github 或其他开…

    other 2023年6月27日
    00
  • 深入探究Java原型模式的魅力

    深入探究Java原型模式的魅力 什么是原型模式? 原型模式是一种通过克隆来创建对象的设计模式。在使用原型模式时,需要先创建一个原型对象,然后通过复制该原型对象来创建新的对象。这种方式可以避免重复创建相似的对象,可以提高程序的性能和可维护性。 原型模式的使用场景 原型模式适用于以下场景: 需要创建对象的时间和代价比较大,例如创建数据库连接或者网络连接; 需要在…

    other 2023年6月27日
    00
  • 关于python:in运算符 float(”nan”)和np.nan

    以下是关于“关于Python: in运算符float(‘nan’)和np.nan”的完整攻略,包含两个示例。 关于Python: in运算符float(‘nan’)和np.nan 在Python中,我们可以使用in运算符来检查一个元素是否在一个列表或集合中。但是,当涉及到NaN(Not a Number)时,in运算符的行为可能会有所不同。以下是关于in运算…

    other 2023年5月9日
    00
  • React项目中decorators装饰器报错问题解决方案

    React项目中使用decorators装饰器时,常常会出现”Decorators are not supported at the language”的报错信息。这是因为在默认情况下,React并不支持ES7的decorators语法。本文将讲解解决decorators报错的方法。 什么是decorators装饰器 decorators装饰器是ES7中引入…

    other 2023年6月27日
    00
  • SpringBoot配置加载,各配置文件优先级对比方式

    Spring Boot 在启动时会加载多个配置文件,而不同类型的配置文件有不同的优先级。下面将分别介绍 Spring Boot 配置文件的优先级以及如何加载配置文件。 Spring Boot 配置文件的优先级 Spring Boot 支持多种类型的配置文件,这些类型的配置文件按照以下优先级进行加载: bootstrap.properties 或 bootst…

    other 2023年6月25日
    00
  • iPad成为Windows系统的第二屏幕

    iPad成为Windows系统的第二屏幕的完整攻略 本文将为您提供将iPad设备作为Windows系统的第二屏幕的完整攻略,包括所需的软件、设置步骤、以及两个示例说明。 所需软件 Windows系统电脑 iPad设备 Duet Display软件(可在App Store中下载) 设置步骤 以下是将iPad设备作为Windows系统的第二屏幕的设置步骤: 在W…

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