2015-08-17 31 views

Antwort

43

Die Infrastruktur, die Spring Boot verwendet, kann in Ihrem eigenen Projekt auf die gleiche Weise verwendet werden. Sie haben in @zmitrok eine Antwort zu einer Warnung "unbekannte Eigenschaft" kommentiert. Das liegt daran, dass Ihre Property keine Metadaten enthält, sodass die IDE nichts davon weiß.

Ich würde Ihnen dringend raten nicht @Value zu verwenden, wenn Sie können, da es eher begrenzt ist im Vergleich zu dem, was Angebote Frühlings-Boot (@Value ist eine Funktion, Spring Framework).

starten, indem Sie einige POJO für Ihre IP-Erstellung:

@ConfigurationProperties("app.foo") 
public class FooProperties { 

    /** 
    * IP of foo service used to blah. 
    */ 
    private String ip = 127.0.0.1; 

    // getter & setter 
} 

Dann haben Sie zwei Möglichkeiten

  1. Put @Component auf FooProperties und die Verarbeitung von Konfigurationseigenschaften ermöglichen durch Zugabe von @EnableConfigurationProperties auf einem Ihrer @Configuration Klasse (dieser letzte Schritt ist nicht mehr erforderlich ab Spring Boot 1.3.0.M3)
  2. Lassen Sie FooProperties als i s und fügen Sie @EnableConfigurationProperties(FooProperties.class) zu irgendeiner Ihrer Klasse hinzu, die eine Frühlings-Bohne automatisch für Sie verursacht.

Sobald Sie das getan haben, app.foo.ip in application.properties verwendet werden können, und Sie können @AutowiredFooProperties im Code für den Wert der Immobilie

@Component 
public MyRestClient { 

    private final FooProperties fooProperties; 

    @Autowired 
    public MyRestClient(FooProperties fooProperties) { ... } 

    public callFoo() { 
     String ip = this.fooProperties.getIp(); 
     ... 
    } 

} 

Gut aussehen, damit Ihre Schlüssel immer noch gelb ist in Ihrem IDE. Der letzte Schritt ist add an extra dependency that will look your code and generate the relevant meta-data at build time. Fügen Sie folgendes zu Ihrem pom.xml

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

Und voilà, Ihr Schlüssel erkannt wird, haben Sie javadoc und die IDE gibt Ihnen den Standardwert (den Wert, den Sie auf dem Feld initialisiert). Sobald Sie das haben, können Sie einen beliebigen Typ verwenden, den der Konvertierungsservice behandelt (d. H. URL), und das Javadoc auf dem Feld wird verwendet, um die Dokumentation für Ihre Schlüssel zu generieren.

Sie können auch eine JSR-303 Constraint-Validierung auf Ihrem Feld hinzufügen (z. B. eine Regex, um zu überprüfen, ob es sich um eine gültige IP handelt).

Überprüfen Sie this sample project und the documentation für weitere Details.

+3

hatte Wow keine Ahnung von irgendetwas davon (vielleicht sollte ich beginnen, die doc Lesen etwas mehr) Das hat eine Tonne geholfen, danke. – Kingamere

+0

Ich befolgte diese Schritte (Option 1 oben), aber Spring Tool Suite markiert immer noch meine Eigenschaft als unbekannt in der Datei 'application.properties'. Es gibt eine schnelle Lösung, um die Metadaten der Anwendung zu erstellen, aber ich nahm an, dass der 'Spring-Boot-Konfigurationsprozessor' das beheben sollte? –

+0

Sie müssen das STS-Team fragen. Alles was ich weiß ist, dass es out-of-the-box funktionieren sollte. Es gibt nicht viel für uns zu untersuchen, erstellen Sie einen anderen Thread mit mehr Details bitte. –

3

Sie können Ihre eigenen Einträge in die application.properties hinzufügen. So stellen Sie sicher, dass der Eigenschaftsname nicht mit den gemeinsamen Eigenschaften bei http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

+1

Ich sehe, aber wenn ich 'restAPIServiceAddress' als Eintrag eingeben, wird es in gelb unterstrichen und sagt "ist eine unbekannte Eigenschaft", ist das okay? – Kingamere

+4

Ich habe gerade eine Antwort hinzugefügt, die erklärt, was dieses gelbe Ding bedeutet. –

12

Statt hartzucodieren die IP aufgelistet kollidiert in die Properties-Datei, können Sie die Anwendung mit

-Dmy.property=127.127.10.20

und Frühlings-Boot starten automatisch abholen mit

@Value("${my.property}") 
private String myProperty; 
+0

Wo füge ich '-Dmy.property' hinzu? – Kingamere

+0

welche IDE verwenden Sie? Wenn es Eclipse ist: http://stackoverflow.com/questions/862391/how-to-pass-the-d-system-properties-which-testing-on-eclipse – cahen

+0

Wenn Sie über die Befehlszeile ausführen, einfach hinzufügen es bis zum ende – cahen

Verwandte Themen