Tuesday, February 14, 2017

How can I deploy a war file to the built-in Tomcat server of a Spring Boot Application that resides INSIDE the standalone?

Leave a Comment

I have a server module which depends on a web modules:

<dependency>     <groupId>org.ema.server</groupId>     <artifactId>web</artifactId>     <version>0.0.1-SNAPSHOT</version>     <type>war</type> </dependency> 

which is getting re-packaged with the spring-boot-maven-plugin in order to get a standalone:

<plugin>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-maven-plugin</artifactId>     <configuration>         <fork>true</fork>         <mainClass>org.ema.server.Server</mainClass>     </configuration>     <executions>         <execution>             <goals>                 <goal>repackage</goal>             </goals>         </execution>     </executions> </plugin> 

Everything is working so far. The web module is getting included into the final jar as BOOT-INF/lib/web-0.0.1-SNAPSHOT.war.

I know Spring allows one to load additional war files for Tomcat at runtime but it appears that such a war file must either be located somewhere in the file system or I am doing it wrong.

The question is how I can keep the standalone feeling but still be able to add war files into my final standalone jar and deploy them to the built-in Tomcat?

Below is the code that shows how one could potentially do this but I am not sure if it can be done the way I require it:

@Bean public EmbeddedServletContainerFactory servletContainerFactory() {      LOGGER.info("Adding web app");      return new TomcatEmbeddedServletContainerFactory() {          @Override         protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {              // Ignore that since it's not working anyway.             String resourcePath = getClass().getResource("/../lib/web-0.0.1-SNAPSHOT.war").getPath().toString();              try {                 tomcat.addWebapp("/web", resourcePath);             } catch (ServletException ex) {                 throw new IllegalStateException("Failed to add webapp", ex);             }             return super.getTomcatEmbeddedServletContainer(tomcat);         }     }; } 

0 Answers

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment