Estoy tratando de establecer una raíz de contexto de aplicaciones Spring Boot mediante programación. El motivo de la raíz de contexto es que queremos que se acceda a la aplicación y que se agreguen localhost:port/{app_name}
todas las rutas del controlador.
Aquí está el archivo de configuración de la aplicación para la aplicación web.
@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;
}
}
Aquí está el controlador de índice para la página principal.
@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";
}
}
La nueva raíz de la aplicación debe estar en localhost:12378/mainstay
, pero todavía se encuentra en localhost:12378
.
¿Qué me falta que hace que Spring Boot no agregue la raíz de contexto antes de la asignación de solicitud?
fuente
EmbeddedServletContainerCustomizer
también funcione. Pero me gustaría ir a lo que se proporciona en lugar de tratar de escapar por su cuenta. La razón por la cual su solución no funciona tiene que ver con el comportamiento predeterminado programado (¿accidentalmente?) EnServerProperties
, el predeterminado configuradocontextPath
es""
(y lo compruebanull
y no""
. Este último anula su configuración explícitacontextPath
.Si está utilizando Spring Boot, entonces no tiene que configurar las propiedades del servidor a través de la inicialización de Vean.
En cambio, si hay una funcionalidad disponible para la configuración básica, se puede establecer en un archivo de "propiedades" llamado
application
, que debe residirsrc\main\resources
en la estructura de su aplicación. El archivo de "propiedades" está disponible en dos formatos..yml
.properties
La forma en que especifica o establece las configuraciones difiere de un formato a otro.
En su caso específico, si decide usar la extensión
.properties
, entonces tendría un archivo llamadoapplication.properties
bajosrc\main\resources
con los siguientes ajustes de configuraciónOTOH, si decide usar la
.yml
extensión (es decirapplication.yml
), necesitará establecer las configuraciones con el siguiente formato (es decirYAML
):Para conocer las propiedades más comunes de Spring Boot, consulte el siguiente enlace:
fuente
Si usa Spring Boot 2.0.0 use:
fuente
server.servlet.contextPath=/api
tenga en cuenta que las propiedades "server.context-path" o "server.servlet.context-path" [a partir de springboot 2.0.x] solo funcionarán si está implementando en un contenedor incorporado, por ejemplo, Tomcat incorporado. Estas propiedades no tendrán efecto si está implementando su aplicación como una guerra a un gato externo, por ejemplo.
vea esta respuesta aquí: https://stackoverflow.com/a/43856300/4449859
fuente
war
archivo usandospringboot v2.x
ytomcat v8.5
?Las propiedades correctas son
configurar la ruta del DispatcherServlet
y
para configurar la ruta del contexto de las aplicaciones debajo de eso.
fuente
Podemos cambiar la ruta raíz del contexto utilizando una entrada simple en el archivo de propiedades.
application.properties
fuente
Podemos configurarlo
application.properties
comoAPI_CONTEXT_ROOT=/therootpath
Y accedemos a él en la clase Java como se menciona a continuación
fuente
server.contextPath = / mainstay
funciona para mí si tuviera un archivo war en JBOSS. Entre los múltiples archivos war donde cada uno contiene jboss-web.xml no funcionó. Tuve que poner jboss-web.xml dentro del directorio WEB-INF con contenido
fuente
En Spring Boot 1.5:
Agregue la siguiente propiedad en
application.properties
:Nota:
/demo
es su URL de ruta de contexto.fuente
Puede hacerlo agregando el puerto y la ruta contextual fácilmente para agregar la configuración en el archivo [src \ main \ resources] .properties y también el archivo .yml
configuración del archivo application.porperties
configuración del archivo application.yml
También podemos cambiarlo programáticamente en el arranque de primavera.
}
También podemos agregar otra forma
usando el comando java spring boot 1.X
usando el comando java spring boot 2.X
fuente
Si está utilizando application.yml y la versión de primavera anterior a 2.0, configure de la siguiente manera.
Ahora todas las llamadas a la API serán como http: // localhost: 8081 / demo-api /
fuente
Podemos configurarlo usando
WebServerFactoryCustomizer
. Esto se puede agregar directamente en la clase de método principal de inicio de Spring que inicia Spring ApplicationContext.fuente
Si usa Spring Boot 2.xy desea pasar la propiedad de ruta de contexto en la línea de comando, debe poner doble // como este:
Eso funcionó para mí corriendo en Windows.
fuente
fuente
Debe ser: server.servlet.context-path = / demo tenga en cuenta que no tiene comillas solo el valor precedido por '/' este valor va en su archivo application.properties
fuente
la ruta de contexto se puede integrar directamente al código, pero no es aconsejable, ya que no se puede reutilizar, así que escriba en el archivo application.properties server.contextPath = / name de la carpeta donde colocó el código contextPath = nombre de la carpeta donde colocó el código / Nota: mire la barra con cuidado.
fuente