https://a.storyblok.com/f/270183/1368x665/7d47494bfb/java_environmental-variables_24.png

Arbeiten mit Umgebungsvariablen in Java

Zuletzt aktualisiert am March 7, 2024

Lesedauer: 5 Minuten

Einführung

Umgebungsvariablen (manchmal auch "env vars" genannt) sind Variablen, die Sie außerhalb Ihres Programms speichern und die dessen Ausführung beeinflussen können. Sie können diesen Wert später verwenden, um das Verhalten von Programmen, Anwendungen und Diensten zu ändern. Applications behandeln Umgebungsvariablen während der Ausführung als feste Werte und nicht als veränderbare Variablen (ein Wert, der sich ändern kann). Sie sind am nützlichsten für Werte, die Sie normalerweise hart kodieren würden, aber nicht in Ihrem Code verwenden sollten, entweder weil sie sich zwischen verschiedenen Umgebungen ändern oder weil sie sensibel sind, wie API-Schlüssel oder Passwörter. Auf diese Weise bleibt Ihr Code portabel, lässt sich leichter verwalten und schützt Geheimnisse in weniger sicheren Umgebungen, wie z. B. bei der Entwicklung oder beim Testen.

In diesem Blog-Beitrag erfahren Sie, was Umgebungsvariablen sind, warum sie in Java-Applikationen wichtig sind, welche Anwendungsfälle es gibt und wie man sie in verschiedenen Umgebungen setzt und darauf zugreift.

Voraussetzungen

- Grundkenntnisse in Java

- Eine IDE wie IntelliJ IDEA oder Eclipse

- Ein Vonage Account

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

Anwendungsfälle

Häufig werden Umgebungsvariablen verwendet:

  • API-Schlüssel, Kennwörter und Token sicher außerhalb des Codes zu speichern.

  • Konfigurationen zwischen Entwicklung, Test, Staging und Produktion wechseln.

  • denselben Code ohne Änderungen auf verschiedenen Rechnern oder Containern auszuführen.

  • definieren Variablen wie PATH oder JAVA_HOME.

Speichern von API-Schlüsseln, Kennwörtern und Token

Wie es funktioniert

Sensible Informationen wie API-Schlüssel, Datenbankpasswörter oder Authentifizierungs-Token können in Umgebungsvariablen gespeichert werden (z. B., API_KEY oder DB_PASSWORD).

Vorteile

Geheimnisse aus dem Quellcode herauszuhalten, senkt die Sicherheitsrisiken und verhindert versehentliche Lecks in der Versionskontrolle. Außerdem ist es einfacher, Schlüssel oder Passwörter zu ändern, da man nur eine einzige Datei bearbeiten muss.

Beispiel für die Umsetzung

In Java kann ein Vonage API-Schlüssel als Umgebungsvariable gespeichert werden, z. B. als VONAGE_API_KEY. Sie greifen darauf im Code mit System.getenv("VONAGE_API_KEY")zugreifen und sicherstellen, dass der Schlüssel nicht direkt in die Anwendung eingebettet ist.

Umschalten von Konfigurationen zwischen Umgebungen

Wie es funktioniert

Umgebungsvariablen, wie z.B. ENV_MODE oder APP_ENV, können angeben, ob die Anwendung in einer Entwicklungs-, Test-, Staging- oder Produktionsumgebung ausgeführt wird.

Vorteile

Dadurch können Anwendungen ihr Verhalten automatisch an den jeweiligen Kontext anpassen. So können Sie beispielsweise im Entwicklungsmodus die ausführliche Protokollierung aktivieren, während in der Produktion diese Protokolle aus Leistungsgründen minimiert werden.

Beispiel für die Umsetzung

Eine Java-Anwendung könnte prüfen System.getenv("ENV_MODE") um die korrekte Datenbankverbindungszeichenfolge zu wählen oder um Debugging-Werkzeuge je nach Umgebung zu aktivieren/deaktivieren.

Ausführen desselben Codes auf verschiedenen Rechnern oder Containern

Wie es funktioniert

Da die Umgebungsvariablen außerhalb des Codes bleiben, kann dieselbe Codebasis ohne Änderungen auf verschiedenen Rechnern, Servern oder Containern bereitgestellt werden.

Vorteile

Dies erleichtert das Verschieben und Skalieren von Applications, insbesondere in containerisierten Setups wie Docker oder Kubernetes, da Sie nur die Werte der Umgebungsvariablen anpassen müssen, ohne den Quellcode zu verändern.

Beispiel für die Umsetzung

Eine containerisierte Java-Anwendung kann Umgebungsvariablen für Datenbankanmeldeinformationen und Dienst-URLs definieren. Unabhängig davon, ob der Container lokal oder in der Produktion läuft, funktioniert derselbe Code, da er aus der Umgebung gelesen wird.

Definieren von Pfadvariablen

Wie es funktioniert

Umgebungsvariablen wie PATH oder JAVA_HOME geben die Speicherorte auf Systemebene für ausführbare Dateien, Bibliotheken oder Laufzeitumgebungen an.

Vorteile

Auf diese Weise können Tools und Applications konsistent ausgeführt werden, ohne dass die Dateispeicherorte fest codiert werden müssen. Dies ist besonders nützlich, wenn Software auf mehreren Plattformen mit jeweils unterschiedlichen Verzeichnisstrukturen ausgeführt wird.

Beispiel für die Umsetzung

In Java sorgt die Einstellung JAVA_HOME dafür, dass die Anwendung immer weiß, wo sie das JDK finden kann. Durch das Lesen von Pfaden aus Umgebungsvariablen vermeiden Entwickler plattformspezifische Probleme und machen ihre Applications portabler.

Wie man Umgebungsvariablen verwendet

Um Umgebungsvariablen zu verwenden, definieren Sie sie zunächst in Ihrem System oder in einer Konfigurationsdatei und greifen dann zur Laufzeit über Ihre Anwendung auf ihre Werte zu.

Einstellen von Umgebungsvariablen

Als beste Praxis sollten Sie Umgebungsvariablen in Ihrem Betriebssystem setzen bevor Sie Ihre Java-Anwendung starten. Dies kann über die Befehlszeile oder direkt in einer .env-Datei erfolgen.

Umgebungsvariablen vor der Ausführung der Java-Anwendung festlegen

Der gängigste Ansatz ist das Setzen von Umgebungsvariablen in Ihrem Betriebssystem vor dem Start Ihrer Java-Anwendung. Dies kann über die Befehlszeile oder über Skripte erfolgen.

In einer Unix-Umgebung können Sie zum Beispiel eine Umgebungsvariable im Terminal wie folgt setzen:

export MY_VAR="some value"

In der Windows-Eingabeaufforderung wäre dies der Fall:

set MY_VAR=some value

Set für Unterprozesse

Wenn Sie Umgebungsvariablen setzen müssen für Sub-Prozesse die von Ihrer Java-Anwendung gestartet werden (und nicht für den Java-Prozess selbst), können Sie die Klasse ProcessBuilder verwenden:

ProcessBuilder processBuilder = new ProcessBuilder();
Map<String, String> env = processBuilder.environment();
env.put("MY_VAR", "some value");
Process process = processBuilder.start();

Umgebungsvariablen in der IDE festlegen

Wenn Sie eine integrierte Entwicklungsumgebung (IDE) verwenden, wie IntelliJ IDEA oder Eclipseverwenden, können Sie in den Konfigurationseinstellungen Ihrer Anwendung Umgebungsvariablen festlegen.

Umgebungsvariablen in Build Tools festlegen

Bei der Verwendung von Build-Tools wie Maven oder Gradleverwenden, können Sie Umgebungsvariablen in den Build-Skripten oder Konfigurationsdateien konfigurieren.

Laden von Konfigurationen aus einer Datei

Da java.util.Properties die Schnittstelle Map implementiert, können Sie jede Datei laden, die Schlüssel-Wert-Paare auf diese Weise abbildet, unabhängig von ihrer Dateierweiterung:

var props = new Properties();
var envFile = Paths.get("/path/to/MyEnvConfig.env");
try (var inputStream = Files.newInputStream(envFile)) {
	props.load(inputStream);
}
String apiKey = props.get("VONAGE_API_KEY");
String apiSecret = props.get("VONAGE_API_SECRET");

Abrufen von Umgebungsvariablen

Der Zugriff auf Umgebungsvariablen in Java ist einfach und kann mit der System Klasse, die von der Standard-Java-Bibliothek bereitgestellt wird. Hier ist eine einfache Anleitung, wie es geht:

Eine einzelne Umgebungsvariable erhalten: Verwenden Sie die System.getenv(String name) Methode, um den Wert einer bestimmten Umgebungsvariablen abzurufen. Um zum Beispiel auf eine Umgebungsvariable namens API_KEYzuzugreifen, würden Sie verwenden:

String apiKey = System.getenv("API_KEY");

Prüfung auf Nullwerte: Es ist eine gute Praxis zu prüfen, ob die Umgebungsvariable Null ist (d.h. nicht gesetzt ist), um mögliche NullPointerExceptions. Zum Beispiel:

String apiKey = Optional.ofNullable(System.getenv("API_KEY")).orElse(otherValue);

Hier, otherValue der Rückfallwert. Wenn Sie es vorziehen, schnell zu scheitern, wenn die Umgebungsvariable nicht vorhanden ist, können Sie stattdessen eine Ausnahme auslösen:

Optional.ofNullable(System.getenv("API_KEY")).orElseThrow(() -> new IllegalStateException("API_KEY env var is not defined"));

Alle Umgebungsvariablen abrufen: Um eine Map<String, String> aller Umgebungsvariablen auszulesen, verwenden Sie System.getenv(). Dies ist nützlich, wenn Sie über alle verfügbaren Umgebungsvariablen iterieren wollen. Zum Beispiel:

Map<String, String> envVars = System.getenv();
for (String envName : envVars.keySet()) {
    System.out.format("%s=%s%n", envName, envVars.get(envName));`
}

Alternativ kann dies auch in einer Zeile geschrieben werden:

System.getenv().forEach((k, v) -> System.out.println(k+"="+v));

Teilen Sie Ihre bewährten Praktiken

Das Abrufen und Setzen von Umgebungsvariablen ist ein wesentlicher Bestandteil der Erstellung von Produktionssoftware. Wenn Sie das Ende dieses Artikels erreicht haben, wissen Sie jetzt, was Umgebungsvariablen sind, welche Anwendungsfälle es gibt, wie man Umgebungsvariablen abruft und setzt und wie man .env-Dateien in Java verwendet. Wir freuen uns immer über die Beteiligung der Community. Bitte schließen Sie sich uns auf GitHub und dem Vonage Community Slack. Haben Sie weitere bewährte Methoden zur Verwendung von Umgebungsvariablen? Bitte teilen Sie sie und markieren Sie mich. Ich würde mich freuen, davon zu hören!

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamAdvokat für Entwickler

Diana ist Entwicklungsbeauftragte bei Vonage. Sie isst gerne frische Austern.