2

Я ищу решение для создания документации для параметров конфигурации пружины, используемых в моем приложении.documenting spring (boot) Свойства конфигурации

Например, у меня есть следующее определение класса 'Person', которое использует свойство person.age из файла application.properties, чтобы установить возраст человека.

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

    public Person(){} 

    private int getAge(){ return age; } 
} 

То, что я хочу иметь, это документация о том, какое свойство делает то, что и то, что по умолчанию для этого свойства, если таковые имеются. Может быть, через комментарий выше атрибута с @value аннотацию, как:

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

в результате чего-то вроде:

person.age, default 21: Used to set the 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; } 
} 

Я autowired сему PersonProperties внутри классов я ранее доступ к свойству непосредственно через @ Значение ("$ {person.age}").В приведенном выше примере это будет:

public class Person { 
    @Autowire 
    private PersonProperties properties; 

    public Person(){} 

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

Для получения документации по собственности, я просто должен был активировать обработку аннотаций.

Для IntelliJ IDEA: перейти к Настройки ->Строительства, Execution, развертывание ->Компилятор ->Аннотация Процессоры и отметьте Включить обработку аннотаций. Для остальных настроек я выбрал значения по умолчанию.

После выполнения сборки результат (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

Весенняя обувь использует класс PropertyPlaceholderHelper, чтобы вращать все свойства. Глядя в исходный код этого класса (here), он использует logger регистрировать все обработанные свойства, если трассировка включена, например:

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

Если добавить ниже свойство файла application.properties весны,

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

Это позволит отслеживать журналы для этого класса, и вы сможете увидеть имена свойств. Однако это не покажет значения, чтобы получить значения, вы можете попробовать расширить класс PropertySourcesPlaceholderConfigurer (возможно, переопределяя метод processProperties).

4

Если вы используете 0BAбобы для управления вашими свойствами, вместо того, чтобы вытаскивать их напрямую, используя @Value, вы можете написать javadoc для этих классов и сделать эту документацию файла свойств.

Смежные вопросы