it-swarm.com.de

Die korrekte Verwendung der Datei application.properties?

Java-Programmierer werden aufgefordert, alle konfigurierbaren Parameter in einer application.properties - Datei zu speichern, aus der sie entweder Eigenschaften zur Laufzeit oder beim Programmstart laden und Variablen in einer Konfigurationsdatei zuweisen.

Ich habe es verwendet, um Variablenwerte zu speichern, die ich zwischen den Programmläufen optimieren muss. Ich habe auch Datenbankverbindungszeichenfolgen und Datenbankdomänennamen in application.properties Gespeichert, diese jedoch kürzlich in den Code verschoben, da es schwierig war, mehrere Zeilen auskommentieren zu lassen, wenn zwischen der Ausführung auf einem lokalen Server und einem Produktionsserver gewechselt wurde.

sql.connString=someProductionString
#sql.connString=someLocalhostString
sql.domain=productionDB
#sql.domain=localhost
mongo.connString=someProductionString
#mongo.connString=someLocalhostString
mongo.domain=productionDB
#mongo.domain=localhost

Es war einfacher, die obigen Zeilen im Code zu haben und nur eine Zeile domain.isRunningOnLocal=true In application.properties Zu ändern.

Mein Chef sagt jedoch, dass :
1. Die Datenbankverbindungszeichenfolgen sollten in application.properties Selbst sein, da ein anderer Entwickler, der an meinem Code zusammenarbeitet, es leicht finden würde, diese Zeichenfolgen zu kennen.
2. Er sagt auch, wenn ich Variablen habe, die ich zwischen Programmläufen optimieren muss, sollten sie im Code innerhalb des Objekts platziert werden, das diese Variablen verwendet.
3. Wenn der Tester oder die QS-Person mein Projekt verwendet, ersetzt sie meine application.properties - Datei durch eine eigene application.properties - Datei, die für die Umgebung relevant ist, in der sie das Programm ausführen.

Er sagte ausdrücklich, dass ich diese Konventionen über meine Bequemlichkeit priorisieren muss und dass nur generische Variablen in application.properties Gespeichert werden sollen; Alle anderen Variablen sind lokal für das Objekt zu speichern, das sie verwendet. Anscheinend gibt es viele Open Source-Projekte, die die Eigenschaftendatei auf eine bestimmte Weise verwenden.

Ich kaufe es nicht, weil alle oben genannten Gründe verschwenden Zeit. Warum Zeit damit verbringen, Zeilen zu kommentieren und zu kommentieren und/oder Variablen im Code zu ändern und neu zu kompilieren?

Gibt es eine empfohlene Möglichkeit, application.properties Zu verwenden?

6
Nav

In einer gut gestalteten Serveranwendung sollten umgebungsspezifische Konfigurationsdaten von der App selbst (dh JAR- oder War-Datei) ausgelagert werden, damit Sie dies nicht tun Die App muss für jede Umgebung neu erstellt werden, in der sie ausgeführt werden muss. In der Regel muss eine seriöse Anwendung in einer Vielzahl von Umgebungen ausgeführt werden (lokal, Test, Demo, Produktion, verschiedene Clientbereitstellungen, geografisch redundanter Sicherungsstandort usw.). Wenn sich also in der App selbst eine application.properties-Datei befindet, sollte diese nur Standardwerte enthalten und es sollte eine Möglichkeit geben, diese Werte in der Umgebung zu überschreiben.

In einer Spring Boot -Anwendung gibt es beispielsweise mehrere Stellen, an denen eine application.properties-Datei gelesen werden kann, z. B. das aktuelle Arbeitsverzeichnis, und sie wird verwendet, um Werte aus einer application.properties-Datei zu überschreiben der Klassenpfad. Es unterstützt auch das Konzept von Profilen, sodass Sie über ein Befehlszeilenargument aus verschiedenen Versionen einer application.properties-Datei innerhalb der App auswählen können (und diese dennoch mit einer externen application.properties überschreiben können).

Das Fazit lautet : Sie sollten Ihren Chef fragen, wie Sie die Werte in den application.properties-Dateien Ihrer App am besten überschreiben können, ohne sie neu zu erstellen, damit Sie sie ordnungsgemäß einrichten können lokal laufen. Wenn er sagt, dass es keinen Weg gibt, würde ich darum bitten, einen umzusetzen. Es ist verrückt, ständig eine geänderte Datei aus dem Code-Repository behalten zu müssen, um lokal ausgeführt zu werden.

Abgesehen davon, und natürlich hängt es von der spezifischen Architektur ab, aber ich denke, es ist normalerweise eine schlechte Idee, echte Produktionsanmeldeinformationen in der Codebasislinie zu speichern, da jemand, der eine Kopie des Codes erhält, jetzt möglicherweise Zugriff auf Produktionsdaten und hat die Fähigkeit, alles zu löschen.

5
J. Lenthe