2016-09-08 2 views
0

Ich habe vor kurzem gelernt, dass es für Spring möglich ist, die spring-configuration-metadata.json Datei zu generieren und auch eine additional-spring-configuration-metadata.json Datei zu erstellen.Zugriff auf Spring Configuration Eigenschaften Metadaten über Code API

Ist es möglich, nativ auf diese Informationen über Spring zuzugreifen und beispielsweise Hilfemeldungen auszudrucken, die aus dieser JSON-Datei extrahiert wurden? Ich habe nichts dergleichen in der Spring documentation erwähnt. Soweit ich das beurteilen kann, sind Konfigurationsklassen POJOs, denen in den tatsächlich injizierten Objekten keine Spring-Metadaten zugeordnet sind.

Sagen, ich habe die folgende Klasse:

package test; 

import org.springframework.boot.context.properties.ConfigurationProperties; 

@ConfigurationProperties(prefix = "myConfig") 
public class MyConfig 
{ 
    /** 
    * myField description. 
    */ 
    private int myField = 3; 

    public int setMyField(int i){ myField = i; } 
    public int getMyField(){ return myField; } 
} 

Und dies wird die folgenden Metadaten erzeugen:

{ 
    "groups": [{ 
    "name": "myConfig", 
    "type": "test.MyConfig", 
    "sourceType": "test.MyConfig" 
    }], 
    "properties": [ 
    { 
     "name": "myConfig", 
     "type": "java.lang.Integer", 
     "description": "myField description.", 
     "sourceType": "test.MyConfig", 
     "defaultValue": 3 
    } 
    ], 
    "hints": [] 
} 

Idealerweise würde ich einen Weg MyConfig.getMyField().getDescription() und "myField description", dass die Rückkehr hat zu schreiben. Ich möchte auch in der Lage sein, zusätzliche Metadaten in JSON hinzuzufügen und sie auf ähnliche Weise abzurufen.

+0

Können Sie erklären, was Sie erreichen wollen? Es ist ein wenig unklar, welche Informationen Sie abrufen möchten oder warum. – chrylis

+0

Also jetzt habe ich eine benutzerdefinierte Annotation wie '' @Description ("Dies ist die Beschreibung für diese Konfigurationsoption") '' und ich füge diese über die Felder in meiner Spring Boot-Konfiguration, die ich später später mit Reflektion abrufen Verwenden Sie in Hilfemeldungen usw. für meine Konfigurationsklassen. Ich möchte in der Lage sein, Elemente zu den Metadaten JSON hinzuzufügen und sie dann mit der Spring-API abzurufen, anstatt diese Anmerkungen selbst zu erstellen, und ich frage mich, ob das möglich ist. – Lucas

+0

Ich habe ein Beispiel zu meiner Frage oben hinzugefügt. – Lucas

Antwort

1

Spring Boot wird mit einem separaten Modul geliefert, das genau das tut. Es wird intern für Tools verwendet, die die Konsistenz der Metadaten überprüfen. Dies ist auch die Grundlage der STS-Unterstützung.

Überprüfen Sie das Projekt spring-boot-configuration-metadata.

Wenn Sie diese zu Ihrem Projekt hinzufügen, können Sie ganz einfach eine Sammlung von Schlüsseln in der aktuellen Classpath definiert bauen:

Resource[] resources = new PathMatchingResourcePatternResolver() 
    .getResources("classpath*:META-INF/spring-configuration-metadata.json"); 
ConfigurationMetadataRepositoryJsonBuilder builder = ConfigurationMetadataRepositoryJsonBuilder.create(); 
for (Resource resource : resources) { 
    try (InputStream in = resource.getInputStream()) { 
     builder.withJsonResource(in); 
    } 
} 
ConfigurationMetadataRepository repository = builder.build(); 
Verwandte Themen