analytics

miércoles, 23 de agosto de 2017

Spring Boot load war


Vamos a ver cómo cargar un .war ajeno a nuestro Tomcat Embebido utilizando Spring Boot.

Aquí ya veíamos como cargar Tomcat embebido con Spring Boot
Aquí vimos cómo utilizar el log de Spring Boot
Y aquí vimos cómo hacer que la conexión de Tomcat sea segura

A nuestro fichero de properties de Spring Boot le añadiremos las líneas del path y el context donde cargará el .war

war.context=/MyApp
war.path=MyApp.war

Y en nuestro código, tendremos que añadir lo siguiente

@Bean
    public EmbeddedServletContainerFactory servletContainerFactory() {
        return new TomcatEmbeddedServletContainerFactory() {

            @Override
            protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                    Tomcat tomcat) {
                // Ensure that the webapps directory exists
                new File(tomcat.getServer().getCatalinaBase(), "webapps").mkdirs();

                try {

                    String warContext = properties.getProperty("war.context");
                    String warPath = properties.getProperty("war.path");
        
                    System.out.println("Will load " + warPath + " on " + warContext);

                    Context context = tomcat.addWebapp(warContext, new File(warPath).getAbsolutePath());
                    // Allow the webapp to load classes from your fat jar
                    context.setParentClassLoader(getClass().getClassLoader());
                } catch (ServletException ex) {
                    throw new IllegalStateException("Failed to add webapp", ex);
                }
                return super.getTomcatEmbeddedServletContainer(tomcat);
            }

        };
    }

Muy fácil no? y no hay que andar peleándose con la configuración de Tomcat. Spring Boot nos hace la gestión casi automáticamente...
Por cierto, asegúrate de tener la siguiente dependencia en tu POM de Maven

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <version>8.5.5</version>
</dependency>

No hay comentarios:

Publicar un comentario