Ich versuche, einen Spring Boot-Anwendungskontextstamm programmgesteuert festzulegen. Der Grund für das Kontextstammverzeichnis ist, dass auf die App zugegriffen werden soll localhost:port/{app_name}
und alle Controller-Pfade daran angehängt werden sollen.
Hier ist die Anwendungskonfigurationsdatei für die Web-App.
@Configuration
public class ApplicationConfiguration {
Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);
@Value("${mainstay.web.port:12378}")
private String port;
@Value("${mainstay.web.context:/mainstay}")
private String context;
private Set<ErrorPage> pageHandlers;
@PostConstruct
private void init(){
pageHandlers = new HashSet<ErrorPage>();
pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
}
@Bean
public EmbeddedServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
logger.info("Setting custom configuration for Mainstay:");
logger.info("Setting port to {}",port);
logger.info("Setting context to {}",context);
factory.setPort(Integer.valueOf(port));
factory.setContextPath(context);
factory.setErrorPages(pageHandlers);
return factory;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
Hier ist der Index-Controller für die Hauptseite.
@Controller
public class IndexController {
Logger logger = LoggerFactory.getLogger(IndexController.class);
@RequestMapping("/")
public String index(Model model){
logger.info("Setting index page title to Mainstay - Web");
model.addAttribute("title","Mainstay - Web");
return "index";
}
}
Das neue Stammverzeichnis der Anwendung sollte sich bei befinden localhost:12378/mainstay
, befindet sich jedoch weiterhin bei localhost:12378
.
Was fehlt mir, was dazu führt, dass Spring Boot den Kontextstamm nicht vor der Anforderungszuordnung anfügt?
quelle
EmbeddedServletContainerCustomizer
auch funktioniert. Aber ich würde gehen, was zur Verfügung gestellt wird, anstatt zu versuchen, sich selbst zu verriegeln. Warum Ihre Lösung nicht funktioniert, hat mit dem (versehentlich?) Programmierten Standardverhalten zu tunServerProperties
, das standardmäßig konfiguriertcontextPath
ist""
(und es prüftnull
und nicht""
. Letzteres überschreibt Ihre explizit festgelegte EinstellungcontextPath
.Wenn Sie Spring Boot verwenden, müssen Sie die Servereigenschaften nicht über die Vean-Initialisierung konfigurieren.
Wenn stattdessen eine Funktionalität für die Grundkonfiguration verfügbar ist, kann sie in einer "Eigenschaften" -Datei namens "Eigenschaften" festgelegt werden
application
, die sichsrc\main\resources
in Ihrer Anwendungsstruktur befinden sollte. Die Datei "Eigenschaften" ist in zwei Formaten verfügbar.yml
.properties
Die Art und Weise, wie Sie die Konfigurationen festlegen oder festlegen, unterscheidet sich von Format zu Format.
Wenn Sie sich in Ihrem speziellen Fall für die Verwendung der Erweiterung entscheiden, wird
.properties
eine Datei mit den folgenden Konfigurationseinstellungenapplication.properties
unter aufgerufensrc\main\resources
OTOH, wenn Sie sich für die Verwendung der
.yml
Erweiterung (dhapplication.yml
) entscheiden, müssen Sie die Konfigurationen im folgenden Format (dhYAML
) festlegen :Weitere allgemeine Eigenschaften von Spring Boot finden Sie unter dem folgenden Link:
quelle
Wenn Sie Spring Boot 2.0.0 verwenden, verwenden Sie:
quelle
server.servlet.contextPath=/api
Beachten Sie, dass die Eigenschaften "server.context-path" oder "server.servlet.context-path" [ab springboot 2.0.x] nur funktionieren, wenn Sie sie in einem eingebetteten Container, z. B. eingebettetem Tomcat, bereitstellen. Diese Eigenschaften haben keine Auswirkung, wenn Sie Ihre Anwendung beispielsweise als War für einen externen Tomcat bereitstellen.
Diese Antwort finden Sie hier: https://stackoverflow.com/a/43856300/4449859
quelle
war
Datei mitspringboot v2.x
und konfiguriert werden kanntomcat v8.5
?Die richtigen Eigenschaften sind
um den Pfad des DispatcherServlet zu konfigurieren
und
um den Pfad des Anwendungskontexts darunter zu konfigurieren.
quelle
Wir können den Kontextstammpfad mithilfe eines einfachen Eintrags in der Eigenschaftendatei ändern.
application.properties
quelle
Wir können es im
application.properties
as einstellenAPI_CONTEXT_ROOT=/therootpath
Und wir greifen in der Java-Klasse darauf zu, wie unten erwähnt
quelle
server.contextPath = / mainstay
funktioniert für mich, wenn ich eine Kriegsdatei in JBOSS hatte. Unter mehreren Kriegsdateien, in denen jede jboss-web.xml enthält, hat es nicht funktioniert. Ich musste jboss-web.xml mit Inhalt in das WEB-INF-Verzeichnis stellen
quelle
In Spring Boot 1.5:
Fügen Sie die folgende Eigenschaft hinzu
application.properties
:Hinweis:
/demo
ist Ihre Kontextpfad-URL.quelle
Sie können dies tun, indem Sie den Port und den Kontextpfad einfach hinzufügen, um die Konfiguration in der .properties-Datei [src \ main \ resources] und in der .yml-Datei hinzuzufügen
Konfiguration der Datei application.porperties
Konfiguration der Datei application.yml
Wir können es auch programmgesteuert im Spring Boot ändern.
}}
Wir können auch einen anderen Weg hinzufügen
mit dem Java-Befehl spring boot 1.X.
mit dem Java-Befehl spring boot 2.X.
quelle
Wenn Sie application.yml und Spring Version über 2.0 verwenden, konfigurieren Sie diese wie folgt.
Jetzt wird der gesamte API-Aufruf wie folgt lauten : http: // localhost: 8081 / demo-api /
quelle
Wir können es mit einstellen
WebServerFactoryCustomizer
. Dies kann direkt in die Spring Boot-Hauptmethodenklasse eingefügt werden, die den Spring ApplicationContext startet.quelle
Wenn Sie Spring Boot 2.x verwenden und die Kontextpfadeigenschaft in der Befehlszeile übergeben möchten, sollten Sie double // wie folgt einfügen:
Das hat bei mir in Windows funktioniert.
quelle
quelle
Es muss sein: server.servlet.context-path = / demo Beachten Sie, dass es keine Anführungszeichen enthält, sondern nur den Wert, dem '/' vorangestellt ist. Dieser Wert wird in Ihre Datei application.properties aufgenommen
quelle
Der Kontextpfad kann direkt in den Code integriert werden, ist jedoch nicht ratsam, da er nicht wiederverwendet werden kann. Schreiben Sie daher in die Datei application.properties server.contextPath = / Name des Ordners, in dem Sie den Code platziert haben. contextPath = Name des Ordners, in dem Sie ihn platziert haben Code / Hinweis: Achten Sie sorgfältig auf den Schrägstrich.
quelle