2017-04-19 4 views
0

Ich habe eine Spring-Boot-Anwendung, die eine Eigenschaftendatei verwenden muss. Diese Anwendung wird in der Cloud sein. Also, die Eigenschaftendatei wird auch auf dem Coud sein.Spring Boot App auf Cloud mit externen Eigenschaften Datei

Ich verwende Cloud Foundry, um mit der Cloud zu kommunizieren und "cf push" zu verwenden, um meine Spring-Boot-Anwendung zu pushen.

Meine Frage: 1. Wo und wie wird eine Eigenschaftendatei gespeichert? Kann es in der Cloud gespeichert werden? Wie? Oder muss es auf Git gespeichert werden und verweisen Sie es in Ihrer Anwendung? 2. Wie benutzt man diese Eigenschaftendatei, die sich am externen Ort befindet?

Antwort

2

Sie können keinen Dateisystemzugriff in der Cloud-Gießerei haben. Sie müssen die Konfigurationsdatei im Klassenpfad selbst behalten und die Eigenschaften aus dem Klassenpfad laden, was auch das Standardverhalten beim Spring-Boot ist. Spring boot application.properties Datei (die innerhalb src/main/resource ist) geht in Ihr jar und Federn lädt es. Wenn Sie also ein eingebettetes jar/war bauen, geht es in Klassenpfad und arbeitet direkt.

Der Cloud Gießerei Weg der Handhabung von Eigenschaften ist durch VCAP-Variablen. Sie können diese Eigenschaften mit dem Deplyoment-Manifest externalisieren, das während des CF-Push verwendet wird. Innerhalb Ihrer Manifest-XML-Datei definieren Sie die Eigenschaften wie folgt.

env: 
    myprop1: myvalue1 
    myprop2: myvalue2 

Mit diesem Ansatz würden alle Eigenschaften für Ihre App als normale Systemeigenschaften verfügbar sein. Sie können auf sie in Ihrer Anwendung als System.getProperties() in Ihrem Java-Code zugreifen.

Der Hauptnachteil bei diesen beiden Ansätzen ist, dass die Anwendung in der Cloud Foundry neu erstellt/zurückgeschickt werden muss. Die Anwendung kann die Änderung in den Eigenschaften nicht dynamisch lesen, sobald die Anwendung ausgeführt wird.

Um diese Spring-Cloud zu überwinden, gibt es ein Projekt cloud-config. Dies kann durch GIT oder einige andere Datasource-Typen wie Dateisystem/Vault usw. unterstützt werden. Dies wird als ein anderer Konfigurationsdienst ausgeführt. Sie können den Konfigurationsserver in Ihrer Anwendungseigenschaftendatei definieren, die Anwendungsleseeigenschaften vom Konfigurationsdienst ausgibt.

Meistens, wenn Sie die Eigenschaften in einer Microservice-Architektur zentralisieren müssen, können Sie für den Config-Service-Ansatz gehen.

+0

1. Warum bietet cloud gießery keinen Dateisystemzugriff an? – Tiya

+0

2. Ich möchte, dass meine Spring-Boot-Anwendung nur einmal in der Cloud bereitgestellt wird.Ich möchte jedoch später den Inhalt meiner Eigenschaftendatei ändern können, ohne meine Spring-Boot-Anwendung in der Cloud neu bereitstellen zu müssen. Kann dies mit application.properties erreicht werden? Können wir die Anwendung .properties nur noch nach der Bereitstellung der Spring-Boot-Anwendung erneut laden? – Tiya

+1

Cloud Foundry wird in einer virtuellen Umgebung ausgeführt. Jede Instanz der Anwendung wird in einem eigenen isolierten Container ausgeführt. Daher sind Dateisysteme nur vorübergehend. Lesen Sie diesen Link, um zu erfahren, wie Cloud Foundry funktioniert. https://docs.cloudfoundry.org/devguide/deploy-apps/prepare-to-deploy.html#filesystem Sie können keine Anwendungseigenschaften neu laden. Sobald Sie einige Eigenschaften geändert haben, müssen Sie sie neu erstellen und die App in die Cloud-Foundry verschieben. Möglicherweise müssen Sie den Cloud-Konfigurationsserver für Ihren Anwendungsfall verwenden. –

0

Wie zu Recht hervorgehoben, ist es am besten geeignet, den Service Spring-Cloud Config zu verwenden. Der Dienst würde die Anmeldeinformationen haben, um ein Git Repo zu treffen (URL, Benutzername und Passwort meistens) und dann können Sie die Eigenschaften erhalten.

Normalerweise würde man Deployment-Dateien definieren (Manifest-Dateien mit Profilen). Wenn Sie also mit einer Testumgebung gehen, die Dspring.profiles.active = Test gibt, würde Ihre Anwendung dies zum Laden verwenden.

Die andere Seite der Geschichte ist es, mehrere Profile in CloudConfigService definiert zu haben. Sie können zwischen diesen wechseln, indem Sie spring.cloud.config.label = youLabel verwenden. Die Verwendung von ConfigService hilft, da es auch eine einfache Möglichkeit bietet, zwischen Konfigurationen mit der Profilauswahl zu wechseln.

Verwandte Themen