2

我正在寻找解决方案来创建我的应用程序中使用的弹簧配置属性的文档。记录弹簧(引导)配置属性

例如,我使用application.properties文件中属性'person.age'来设置人的年龄,类'Person'具有以下定义。

public class Person { 
    @Value("${person.age:21}") 
    private int age; 

    public Person(){} 

    private int getAge(){ return age; } 
} 

我想有什么,是一个文档,说明哪些财产是做什么的,什么是该财产,如果任何默认。也许通过与@Value注解像上面属性的注释:

person.age, default 21: Used to set the age. 

我不是绑定到输出或任何其他的格式:在东西等导致

/** 
* Used to set the age. 
*/ 
@Value("${person.age:21}") 
private int age; 

。我唯一想要的是为我的属性提供某种文档。如果可能的话,最好的办法是直接写入java代码。

我四处搜索,但到目前为止找不到任何有用的东西。我发现的唯一事情是使用注释处理器(http://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html)生成我自己的元数据。 但我不确定这是否可行。如果是这样,我会怀疑是否没有“开箱即用”的解决方案来解决这类问题。我无法想象我是唯一一个想要为弹簧属性提供某种文档的人。

非常感谢您的任何提示。

回答

0

从安德烈亚斯的提示后,我来到了以下解决方案。

我做了一个新的配置类与@ConfigurationProperties注释持有的属性年龄

@ConfigurationProperties(prefix = "person") 
public class PersonProperties { 

    /** 
    * Configures the age of person. 
    */ 
    private int age = 18; 

    private int getAge(){ return age; } 
    private int setAge(int age){ this.age = age; } 
} 

我自动装配这个PersonProperties我以前直接通过访问属性的类中@价值(“$ {person.age}”)。在上面的例子中,它将是:

public class Person { 
    @Autowire 
    private PersonProperties properties; 

    public Person(){} 

    private int getAge(){ return properties.getAge; } 
} 

要获取该属性的文档,我只需激活注释处理。

对于IntelliJ IDEA的: 去设置 - >构建,执行,部署 - >编译 - >标注处理和标记启用注释处理。对于其余设置,我选择了默认值。

运行构建后,结果(JSON)将位于项目文件夹。\ target \ classes \ META-INF \ spring-configuration-metadata.json

这是文档我:

{ 
    "groups": [ 
    { 
     "name": "person", 
     "type": "com.test.PersonProperties", 
     "sourceType": "com.test.PersonProperties" 
    } 
    ], 
    "properties": [ 
    { 
     "name": "person.age", 
     "type": "java.lang.Integer", 
     "description": "Configures the age of person.", 
     "sourceType": "com.test.PersonProperties", 
     "defaultValue": 18 
    } 
    ], 
    "hints": [] 
} 

有了这个解决方案,我仍然可以设置该属性

something.person.age=25 

application.properties在我的应用程序的文件同时有我的财产记录。

现在我正在寻找解决方案,让这种文档以某种方式好看(也许只是通过简单的JSON脚本和CSS),并获得此文档与validation annotations一起使用。 但这些是不同的问题。

感谢Andreas这个伟大的提示。

0

Spring引导使用PropertyPlaceholderHelper类来旋转所有属性。展望该类(here)的源代码,它使用logger如果启用跟踪记录所有的加工性能,例如:

if (logger.isTraceEnabled()) { 
    logger.trace("Resolved placeholder '" + placeholder + "'"); 
} 

如果添加以下属性,以春天的application.properties文件,

logging.level.org.springframework.util.PropertyPlaceholderHelper=TRACE

它将启用该类的跟踪日志记录,您将能够看到属性名称。但是,这不会显示值,要获取值,您可以尝试延长PropertySourcesPlaceholderConfigurer类(可能覆盖processProperties方法)。

4

如果您使用@ConfigurationProperties beans来管理您的属性,而不是直接使用@Value来拉动它们,那么您可以为这些类编写javadoc并制作属性文件文档。