In Spring Boot ermöglicht die Konfiguration des Kontext-Pfads die Definition des Basis-URL-Pfads für Ihre Webanwendung. Dies ist nützlich, wenn Sie mehrere Anwendungen auf dem gleichen Webserver hosten oder einfach den Standard-Kontextpfad ändern möchten. In diesem Artikel werden verschiedene Methoden zur Änderung des Kontext-Pfads in einer Spring Boot Webanwendung erläutert.
Hintergrund
Der Kontext-Pfad ist der Teil der URL, der auf den Anwendungsrouten basiert. Standardmäßig wird der Kontext-Pfad in Spring Boot auf /
gesetzt. Das bedeutet, dass Ihre Anwendung unter http://localhost:8080/
erreichbar ist. Wenn Sie jedoch den Kontext-Pfad ändern möchten, um beispielsweise eine Unteranwendung auf einer speziellen URL zu hosten, müssen Sie bestimmte Schritte unternehmen.
application.properties
Die einfachste Möglichkeit, den Kontext-Pfad in einer Spring Boot Anwendung zu ändern, ist die Verwendung einer Eigenschaften-Datei. Spring Boot verwendet normalerweise die Datei application.properties
oder application.yml
, um Konfigurationseinstellungen zu speichern. Sie können die server.servlet.context-path
Eigenschaft in dieser Datei setzen, um den Kontext-Pfad zu ändern.
Hier ist ein Beispiel in einer application.properties
Datei:
server.servlet.context-path=/meine-anwendung
Oder in einer application.yml
Datei:
server:
servlet:
context-path: /meine-anwendung
Nachdem Sie diese Einstellung hinzugefügt haben, wird Ihre Anwendung unter http://localhost:8080/meine-anwendung/
erreichbar sein.
Programmatische Konfiguration
Eine weitere Möglichkeit, den Kontext-Pfad zu ändern, besteht darin, dies programmatisch in Ihrem Spring Boot Hauptanwendungsprogramm zu tun. Dazu können Sie eine Klasse erstellen, die von ServletRegistrationBean
erbt und die setUrlMappings
Methode überschreibt.
Hier ist ein Beispiel:
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean myServlet() {
ServletRegistrationBean registration = new ServletRegistrationBean<>(new MyServlet(), "/meine-anwendung/*");
return registration;
}
}
Code-Sprache: JavaScript (javascript)
In diesem Beispiel haben wir MyServlet
erstellt und den Kontext-Pfad auf /meine-anwendung
gesetzt. Beachten Sie, dass der Pfad in der ServletRegistrationBean
mit einem Sternchen (/*
) endet, um alle Anfragen unter diesem Pfad abzudecken.
Verwendung von application.properties
in WAR-Dateien
Wenn Sie Ihre Spring Boot Anwendung als WAR-Datei in einem externen Servlet-Container bereitstellen möchten, können Sie den Kontext-Pfad in Ihrer application.properties
Datei wie im ersten Abschnitt beschrieben konfigurieren. Beachten Sie jedoch, dass dies nur funktioniert, wenn Ihr externer Servlet-Container die Spring Boot Eigenschaften richtig auswertet.
Umgebungsvariablen und Befehlszeilenargumente
Eine weitere Methode zur Konfiguration des Kontext-Pfads besteht darin, Umgebungsvariablen oder Befehlszeilenargumente zu verwenden. Dies ermöglicht es Ihnen, den Kontext-Pfad zur Laufzeit festzulegen, ohne die Anwendungsquelle ändern zu müssen.
Um den Kontext-Pfad über eine Umgebungsvariable zu setzen, können Sie Folgendes tun:
export SERVER_SERVLET_CONTEXT_PATH=/meine-anwendung
java -jar meine-anwendung.jar
Oder Sie können es direkt als Befehlszeilenargument an die Anwendung übergeben:
java -jar meine-anwendung.jar --server.servlet.context-path=/meine-anwendung
Beachten Sie, dass die Methode zur Verwendung von Umgebungsvariablen oder Befehlszeilenargumenten zur Laufzeit die Flexibilität bietet, den Kontext-Pfad je nach Umgebung oder Deployment-Anforderungen anzupassen, ohne die Quellcode- oder Konfigurationsdateien ändern zu müssen.
application.properties in einem externen Verzeichnis
Eine weitere Möglichkeit zur Konfiguration des Kontext-Pfads besteht darin, eine externe application.properties
Datei in einem bestimmten Verzeichnis zu platzieren und Spring Boot so zu konfigurieren, dass es diese Datei verwendet. Dies kann nützlich sein, wenn Sie eine Anwendung in verschiedenen Umgebungen mit unterschiedlichen Kontext-Pfaden bereitstellen möchten.
Zuerst erstellen Sie eine application.properties
Datei mit Ihrer Kontextpfad-Konfiguration, z.B.:
server.servlet.context-path=/meine-anwendung
Speichern Sie diese Datei in einem externen Verzeichnis, z.B. /etc/meine-anwendung/
.
Dann können Sie Spring Boot so konfigurieren, dass es diese externe application.properties
Datei verwendet, indem Sie die Umgebungsvariable spring.config.location
setzen:
export spring.config.location=file:/etc/meine-anwendung/
java -jar meine-anwendung.jar
Code-Sprache: JavaScript (javascript)
Dies bewirkt, dass Spring Boot nach der application.properties
Datei im angegebenen Verzeichnis sucht und die darin enthaltenen Einstellungen verwendet.
Anwendungseigene Konfigurationsklasse
Eine weitere Möglichkeit, den Kontext-Pfad zu konfigurieren, besteht darin, eine benutzerdefinierte Konfigurationsklasse zu erstellen, die von EmbeddedServletContainerCustomizer
erbt. Dies ermöglicht es Ihnen, den Kontext-Pfad auf programatische Weise festzulegen.
Hier ist ein Beispiel:
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.stereotype.Component;
@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setContextPath("/meine-anwendung");
}
}
Code-Sprache: JavaScript (javascript)
In dieser Klasse haben wir die customize
Methode überschrieben und den Kontext-Pfad auf /meine-anwendung
gesetzt. Beachten Sie, dass Sie diese Klasse auch verwenden können, um andere Container-Einstellungen anzupassen, wie z.B. den Port oder die SSL-Konfiguration.
Verwendung von application.yml
oder application.properties
in einem externen Verzeichnis
Ähnlich wie bei der Verwendung von application.properties
in einem externen Verzeichnis können Sie auch eine externe application.yml
oder application.properties
Datei verwenden, um den Kontext-Pfad zu konfigurieren. Die Vorgehensweise ist ähnlich wie zuvor beschrieben, jedoch verwenden Sie stattdessen die Umgebungsvariable spring.config.location
:
export spring.config.location=file:/etc/meine-anwendung/
java -jar meine-anwendung.jar
Code-Sprache: JavaScript (javascript)
Spring Boot sucht dann nach der angegebenen application.yml
oder application.properties
Datei im externen Verzeichnis und verwendet die darin enthaltenen Einstellungen.
Fazit
Das Ändern des Kontext-Pfads in einer Spring Boot Webanwendung kann je nach Ihren Anforderungen und Präferenzen auf verschiedene Arten erfolgen. Sie können dies in Ihrer application.properties
oder application.yml
Datei, programmatisch in einer Konfigurationsklasse, über Umgebungsvariablen, Befehlszeilenargumente oder externe Konfigurationsdateien tun. Die Wahl der Methode hängt von Ihren spezifischen Anforderungen und Ihrer Deployment-Strategie ab.
Unabhängig von der Methode, die Sie wählen, ermöglicht Ihnen die Flexibilität von Spring Boot, den Kontext-Pfad Ihrer Webanwendung einfach anzupassen, um Ihre Anwendungsbedürfnisse zu erfüllen.