如何将war文件部署到独立于INSIDE的Spring Boot应用程序的内置Tomcat服务器?

时间:2017-02-05 12:59:56

标签: tomcat spring-boot

我有一个server模块,它取决于web模块:

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

正在重新打包spring-boot-maven-plugin以获得独立版本:

<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>

到目前为止一切正常。 web模块将作为BOOT-INF/lib/web-0.0.1-SNAPSHOT.war包含在最终jar中。

我知道Spring allows one to load additional war files for Tomcat at runtime但似乎这样的war文件必须位于文件系统的某个位置,或者我做错了。

问题是如何保持独立的感觉,但仍然可以将war文件添加到我的最终独立jar并将它们部署到内置的Tomcat?

以下代码显示了如何做到这一点,但我不确定它是否可以按照我的要求完成:

@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 个答案:

没有答案