starter mundo hola espaƱol embebido desde cero java spring spring-mvc spring-boot

java - mundo - spring boot tomcat configuration



Agregar ruta de contexto a la aplicaciĆ³n Spring Boot (9)

Estoy tratando de establecer una raíz de contexto de las aplicaciones Spring Boot programmatically. El motivo de la raíz de contexto es que queremos que se acceda a la aplicación desde localhost:port/{app_name} y tener todas las rutas de acceso del controlador localhost:port/{app_name} .

Aquí está el archivo de configuración de 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 aún se encuentra en localhost:12378 .

¿Qué me está haciendo perder que Spring Boot no anexe la raíz de contexto antes de la asignación de la solicitud?


¿Por qué estás tratando de rodar tu propia solución? Spring-boot ya lo admite.

Si aún no tiene uno, agregue un archivo application.properties a src/main/resources . En ese archivo de propiedades, agregue 2 propiedades:

server.contextPath=/mainstay server.port=12378

ACTUALIZACIÓN (Spring Boot 2.0)

A partir de Spring Boot 2.0 (debido al soporte de Spring MVC y Spring WebFlux) el contextPath se ha cambiado a lo siguiente:

server.servlet.contextPath=/mainstay

Luego puede eliminar su configuración para el contenedor de servlets personalizado. Si necesita realizar algún procesamiento posterior en el contenedor, puede agregar una implementación EmbeddedServletContainerCustomizer a su configuración (por ejemplo, para agregar las páginas de error).

Básicamente, las propiedades dentro de application.properties sirven como valor predeterminado. Siempre puede anularlas mediante el uso de otra application.properties junto al artefacto que entregue o agregando parámetros de JVM ( -Dserver.port=6666 ).

Consulte también la Guía de referencia, especialmente la sección de properties .

La clase ServerProperties implementa EmbeddedServletContainerCustomizer . El valor predeterminado para contextPath es "" . En su ejemplo de código, está configurando el contextPath directamente en TomcatEmbeddedServletContainerFactory . A continuación, la instancia de ServerProperties procesará esta instancia y la restablecerá desde su ruta a "" . ( Esta línea realiza una comprobación null , pero como el valor predeterminado es "" , siempre falla y establece el contexto en "" y anula el suyo).


En Spring Boot 1.5:

Agregue la siguiente propiedad en application.properties :

server.context-path=/demo

Nota: /demo es tu URL de ruta de contexto.


En Spring Boot, para cambiar la ruta de contexto, actualice las propiedades server.contextPath. Los siguientes ejemplos actualizan la ruta de contexto desde / a / mkyong o http://localhost:8080/mkyong

Nota De forma predeterminada, la ruta de contexto es "/".

1.1 Actualización a través de un archivo de propiedades.

/src/main/resources/application.properties

server.port = 8080

server.contextPath = / mkyong


La ruta de contexto se puede integrar directamente en el código, pero no es recomendable ya que no se puede reutilizar, escriba en el archivo application.properties server.contextPath = / nombre de la carpeta donde colocó el código contextPath = nombre de la carpeta donde colocó el código / Nota: observe la barra con cuidado.


Las propiedades correctas son

server.servlet.path

para configurar la ruta del DispatcherServlet

y

server.servlet.context-path

para configurar la ruta del contexto de las aplicaciones debajo de eso.


Podemos establecerlo en application.properties como API_CONTEXT_ROOT=/therootpath

Y accedemos a ella en la clase Java como se menciona a continuación

@Value("${API_CONTEXT_ROOT}") private String contextRoot;


Si está utilizando Spring Boot, no tiene que configurar las propiedades del servidor mediante la inicialización de Vean.

En cambio, si una funcionalidad está disponible para la configuración básica, se puede configurar en un archivo de "propiedades" denominado application , que debe residir en src/main/resources en la estructura de la aplicación. El archivo "propiedades" está disponible en dos formatos

  1. .yml

  2. .properties

La forma de especificar o configurar las configuraciones difiere de un formato a otro.

En su caso específico, si decide usar la extensión .properties , entonces tendrá un archivo llamado application.properties en src/main/resources con la siguiente configuración

server.port = 8080 server.contextPath = /context-path

OTOH, si decides usar la extensión .yml (es decir, application.yml ), necesitarías establecer las configuraciones usando el siguiente formato (es decir, YAML ):

server: port: 8080 contextPath: /context-path

Para conocer las propiedades más comunes de Spring Boot, consulte el siguiente enlace:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html


Si usa Spring Boot 2.0.0, use:

server.servlet.context-path


server.contextPath = / mainstay

funciona para mí si tuviera un archivo war en JBOSS. Entre varios archivos war donde cada uno contiene jboss-web.xml, no funcionó. Tuve que poner jboss-web.xml dentro del directorio WEB-INF con contenido

<?xml version="1.0" encoding="UTF-8"?> <jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd"> <context-root>mainstay</context-root> </jboss-web>