webentwicklung-frage-antwort-db.com.de

Spring Boot - benutzerdefinierte Variablen in Application.properties

Ich habe Spring Boot Client, der eine erholsame API verbraucht. Gibt es einen Schlüsseleintrag in der application.properties, den ich verwenden kann, anstatt die IP-Adresse der REST= API in der Java= Klasse fest zu codieren?

Und wenn nicht, kann ich einen benutzerdefinierten Eintrag erstellen?

Vielen Dank

25
Kingamere

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

Ich würde Ihnen dringend raten , @Value Nicht zu verwenden , da dies im Vergleich zu den Angeboten von Spring Boot (@Value Ist eine Spring Framework-Funktion.

Erstellen Sie zunächst ein POJO für Ihre IP:

@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. Fügen Sie @Component In FooProperties ein und aktivieren Sie die Verarbeitung von Konfigurationseigenschaften, indem Sie @EnableConfigurationProperties Für eine Ihrer Klassen @Configuration Hinzufügen (dieser letzte Schritt ist ab nicht mehr erforderlich) Spring Boot 1.3.0.M3)
  2. Lassen Sie FooProperties unverändert und fügen Sie @EnableConfigurationProperties(FooProperties.class) zu einer Ihrer Klassen @Configuration Hinzu, wodurch automatisch ein Spring Bean für Sie erstellt wird.

Sobald Sie dies getan haben, können Sie app.foo.ip In application.properties Und @AutowiredFooProperties in Ihrem Code verwenden, um nach dem Wert der Eigenschaft zu suchen

@Component
public MyRestClient {

    private final FooProperties fooProperties;

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

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

}

Okay, Ihr Schlüssel ist in Ihrer IDE immer noch gelb. Der letzte Schritt ist fügen Sie eine zusätzliche Abhängigkeit hinzu, die Ihren Code anzeigt und die relevanten Metadaten zum Zeitpunkt der Erstellung generiert . Fügen Sie Ihrer pom.xml Folgendes hinzu

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

Und voilà, Ihr Schlüssel wird erkannt, Sie haben javadoc und die IDE gibt Ihnen den Standardwert (den Wert, den Sie auf dem Feld initialisiert haben). Sobald Sie das haben, können Sie die Konvertierung beliebig eingeben Service-Handles (dh URL) und das Javadoc auf dem Feld werden verwendet, um die Dokumentation für Ihre Schlüssel zu generieren.

Sie können Ihrem Feld auch eine beliebige JSR-303 - Einschränkungsvalidierung hinzufügen (z. B. einen regulären Ausdruck, um zu überprüfen, ob es sich um eine gültige IP-Adresse handelt).

Überprüfen Sie dieses Beispielprojekt und die Dokumentation für weitere Details.

82
Stephane Nicoll

Anstatt die IP-Adresse fest in die Eigenschaftendatei zu codieren, können Sie die Anwendung mit starten

-Dmy.property=127.127.10.20

Und Spring Boot nimmt es automatisch mit

@Value("${my.property}")
private String myProperty;
14
cahen

Sie können den application.properties Ihre eigenen Einträge hinzufügen. Stellen Sie lediglich sicher, dass der Eigenschaftsname nicht mit den unter http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties aufgeführten allgemeinen Eigenschaften in Konflikt steht =

3
zmitrok