Spring中如何为属性配置文件自动产生文档?

在本博客中,您将了解 Spring Configuration Property Documenter Maven 插件,它可以为您解决这个问题。

几乎每个 Spring(启动)应用程序都会使用配置属性。这些配置属性确保应用程序中的某些项目可以通过 application.properties(或 yaml)文件进行配置。

然而,还需要记录这些属性,以便有人知道这些属性的含义、如何使用它们等。这通常记录在自述文件中。当属性存在于还包含文档和注释的 Java 类中时,需要手动维护此 README 文件。

如果文档位于一个位置(Java 类,靠近代码)并且可以从代码中生成文档,这不是很好吗?
好消息!这正是Spring Configuration Property Documenter Maven 插件将为您做的事情!

本博客中使用的资源可以在GitHub上找到。

首先,您需要创建一个基本的示例应用程序。
用@ConfigurationPropertiesScan注释主 Spring Boot 应用程序类:

@SpringBootApplication
@ConfigurationPropertiesScan("com.mydeveloperplanet.myspringconfigdocplanet.config")
public class MySpringConfigDocPlanetApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(MySpringConfigDocPlanetApplication.class, args);
    }
 
}

在包 config 中创建一个配置类 MyFirstProperties。该配置类使用了构造函数绑定。

@Getter
@ConfigurationProperties("my.first.properties")
public class MyFirstProperties {
 
    private final String stringProperty;
 
    private final boolean booleanProperty;
 
    public MyFirstProperties(String stringProperty, boolean booleanProperty) {
        this.stringProperty = stringProperty;
        this.booleanProperty = booleanProperty;
    }
}

此外,包控制器中还添加了一个 ConfigurationController,用于返回属性。添加该控制器只是为了举例说明如何使用属性,与本博客无关。

构建运行:
mvn clean verify
mvn spring-boot:run

调用:
curl http://localhost:8080/configuration

请查看目录 target/classes/META-INF。这里有一个文件 spring-configuration-metadata.json,其中包含有关配置类的元数据。Spring Configuration Property Documenter Maven 插件会使用这些信息来生成文档。

生成该元数据文件是因为添加了 Spring Configuration Processor 作为依赖项。

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

生成文档
该插件可生成四种不同格式的文档:

  • ASCII Doctor
  • Markdown
  • HTML
  • XML

要生成文档,只需将插件添加到构建部分(添加 Spring Configuration Processor 依赖项旁边)即可。每种格式类型都会添加一个执行程序。如果只想要标记符格式的文档,只需移除其他执行项即可。

<build>
  <plugins>
    <plugin>
      <groupId>org.rodnansol</groupId>
      <artifactId>spring-configuration-property-documenter-maven-plugin</artifactId>
      <version>0.6.1</version>
      <executions>
        <execution>
          <id>generate-adoc</id>
          <phase>process-classes</phase>
          <goals>
            <goal>generate-property-document</goal>
          </goals>
          <configuration>
            <type>ADOC</type>
          </configuration>
        </execution>
        <execution>
          <id>generate-markdown</id>
          <phase>process-classes</phase>
          <goals>
            <goal>generate-property-document</goal>
          </goals>
          <configuration>
            <type>MARKDOWN</type>
          </configuration>
        </execution>
        <execution>
          <id>generate-html</id>
          <phase>process-classes</phase>
          <goals>
            <goal>generate-property-document</goal>
          </goals>
          <configuration>
            <type>HTML</type>
          </configuration>
        </execution>
        <execution>
          <id>generate-xml</id>
          <phase>process-classes</phase>
          <goals>
            <goal>generate-property-document</goal>
          </goals>
          <configuration>
            <type>XML</type>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

文件将在使用 Maven 执行构建时生成,但快速方法是执行 process-classes 目标。

mvn process-classes

您也可以调用特定的执行。

mvn spring-configuration-property-documenter:generate-property-document@generate-markdown

请查看目录 target/property-docs。每种类型都添加了配置属性的文档。

如果您有一个 Maven 多模块项目,可以将不同模块的所有属性合并到一个文件中。文档documentation中介绍了如何做到这一点。

结论
Spring Configuration Property Documenter Maven 插件是一项伟大的创举,它让文档更贴近代码,并根据代码生成文档。在我看来,它填补了一个空白,几乎惠及所有 Spring 项目。