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.jarCode-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.jarCode-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.