春季配置属性记录仪
#html #springboot #markdown #asciidoc

问题

  • 您是否曾经觉得自己没有适当的方法来监督一个项目,因为它具有许多可自定义的属性,但没有记录在下面,并且您不知道在哪里可以启动新功能或bugfix?

  • 您是否曾经觉得自己的服务太多了,您不知道如何在外部自定义它们?

  • 您是否曾经想过有任何方法可以记录您项目中的应用程序的属性?

如果出于任何问题,您的答案是,那么您是最好的位置。

春季配置属性记录仪

此工具使您可以生成有关项目中@ConfigurationProperties注释的类的信息和有用的文档。

但是如何?

很容易,如果您使用Spring Boot工作,则首先需要在构建时间期间对类Path的依赖性,这是注释处理器,它将读取您的类并基于注释配置类生成元数据文件。

在Maven的情况下,您应该添加以下依赖性:

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

mvn package之后,以下文件应显示在您的target文件夹的META-INF文件夹中:spring-configuration-metadata.json

这是一个简单的JSON文件,但其中包含有关您的配置属性的信息。

让我们看看一个示例:

@Component
@ConfigurationProperties(prefix = "this.is.my")
class MyProperties {

    /**
     * This is my variable.
     */
    private String variable;

    @Deprecated(since = "Since you are a pilot")
    private String anotherVariable = "with default value";

    /**
     * A duration.
     */
    private Duration duration = Duration.ofDays(2);

    private Instant instant = Instant.ofEpochSecond(123);

    private LocalDate date = LocalDate.of(1995, 10, 20);

    private LocalDateTime dateTime = LocalDateTime.of(1995, 10, 20, 0, 1, 2, 3);
    // Getters & Setters

    @DeprecatedConfigurationProperty(reason = "Because it is deprecated", replacement = "instant")
    public Duration getDuration() {
        return duration;
    }
}

生成的spring-configuration-metadata.json文件:

{
  "groups": [
    {
      "name": "this.is.my",
      "type": "org.rodnansol.MyProperties",
      "sourceType": "org.rodnansol.MyProperties"
    }
  ],
  "properties": [
    {
      "name": "this.is.my.date",
      "type": "java.time.LocalDate",
      "sourceType": "org.rodnansol.MyProperties"
    },
    {
      "name": "this.is.my.date-time",
      "type": "java.time.LocalDateTime",
      "sourceType": "org.rodnansol.MyProperties"
    },
    {
      "name": "this.is.my.instant",
      "type": "java.time.Instant",
      "sourceType": "org.rodnansol.MyProperties"
    },
    {
      "name": "this.is.my.variable",
      "type": "java.lang.String",
      "description": "This is my variable.",
      "sourceType": "org.rodnansol.MyProperties"
    },
    {
      "name": "this.is.my.another-variable",
      "type": "java.lang.String",
      "sourceType": "org.rodnansol.MyProperties",
      "deprecated": true,
      "deprecation": {}
    },
    {
      "name": "this.is.my.duration",
      "type": "java.time.Duration",
      "description": "A duration.",
      "sourceType": "org.rodnansol.MyProperties",
      "deprecated": true,
      "deprecation": {
        "reason": "Because it is deprecated",
        "replacement": "instant"
      }
    }
  ],
  "hints": []
}

好的,但是下一步是什么?

我们构建了一个可以使用此JSON文件的工具,并可以从其以下格式中生成文档:

  • Markdown
  • asciidoc
  • HTML
  • XML-如果XSLT转换和XSD支持
  • 你命名

您可以找到它here

它能做什么?

读取一个或多个元数据文件

读取您的元数据JSON文件后,将以指定格式创建文档。

可以在该过程之前指定多个JSON元数据文件,多模块项目还可以利用它具有一个文档,其中所有属性都可以从不同的模块中获得。

如果元数据文件在JAR文件中,则不是问题,该工具可以从JAR文件中读取它。

汇总更多元数据文件

如果您在多模型环境中工作,则可能有多个元数据文件,但是您不必担心,也可以生成单个文档和汇总文档。

默认模板和自定义

该工具为您提供了一个用车把编写的默认模板,但也准备支持自定义模板。

默认情况下,支持车把模板引擎得到支持,但是您可以使用自己的模板引擎,但是您必须为其编写扩展名。

查看文档here

排除并包括组和属性

由于该工具也使您还可以从JAR文件中读取和使用元数据文件,因此您可以从官方的Spring Boot Jars中提取信息,并且可以将其放入最终文档。

有时这些文件很大,您可能需要选择特定的组和/或密钥要渲染或不渲染到最终输出中。

也支持排除和包含列表。

请检查以下样本here

如何使用该工具?

核心功能是用Java 11构建的,这些功能可通过:

获得:

用法

只需将以下插件添加到您的pom.xml,就可以使用了。


<plugin>
    <groupId>org.rodnansol</groupId>
    <artifactId>spring-configuration-property-documenter-maven-plugin</artifactId>
    <version>${final-version}</version>
    <executions>
        <execution>
            <id>generate-adoc</id>
            <phase>process-classes</phase>
            <goals>
                <goal>generate-property-document</goal>
            </goals>
            <configuration>
                <type>ADOC</type>
            </configuration>
        </execution>
    </executions>
</plugin>

Final version

检查可用的Maven目标here

模板自定义

如果默认一个不符合您的要求,可以自定义模板,请阅读有关here的文档。

AsciiDoc Example


AsciiDoc Example 2

结帐样品和文档

随时可以查看样品和文档,因为它将为how-tos提供更广泛的了解。

您是否正在使用Quarkus的Spring Boot?

如果是的,请不要担心,我们为您覆盖,请查看此sample

跟随Rodnan Sol以获取更多

Twitter followers GitHub followers

也关注作者

Twitter followers GitHub followers