查看原文
其他

Spring Boot 发布 jar 包转为 war 包秘籍。

2018-03-20 爱你们的 Java技术栈


Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布。使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题。所以,jar包不一定合适适用所有的场景,如war包更合适,你可以尝试转为传统的war包,这样打补丁包可能更方便。

如何配置打war包呢?

以下配置以Maven为说明讲解,Gradle的查看类似配置。

1、修改Spring Boot启动类

启动类继承 SpringBootServletInitializer类,并覆盖 configure方法。

下面是Spring Boot提供的示例代码。

  1. @SpringBootApplication

  2. public class Application extends SpringBootServletInitializer {

  3.    @Override

  4.    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

  5.        return application.sources(Application.class);

  6.    }

  7.    public static void main(String[] args) throws Exception {

  8.        SpringApplication.run(Application.class, args);

  9.    }

  10. }

2、修改jar为war包形式

在pom文件中,添加war包配置。

  1. <packaging>war</packaging>

如果不添加,默认为jar包。

3、去除Spring Boot内置Tomcat

修改自带tomcat依赖范围为provided,防止与外部tomcat发生冲突。

  1. <dependencies>

  2.    <!-- … -->

  3.    <dependency>

  4.        <groupId>org.springframework.boot</groupId>

  5.        <artifactId>spring-boot-starter-tomcat</artifactId>

  6.        <scope>provided</scope>

  7.    </dependency>

  8.    <!-- … -->

  9. </dependencies>

4、添加war包打包插件

如果你用的是继承spring-boot-starter-parent的形式使用Spring Boot,那可以跳过,因为它已经帮你配置好了。如果你使用的依赖spring-boot-dependencies形式,你需要添加以下插件。

  1. <plugin>

  2.    <groupId>org.apache.maven.plugins</groupId>

  3.    <artifactId>maven-war-plugin</artifactId>

  4.    <configuration>

  5.        <failOnMissingWebXml>false</failOnMissingWebXml>

  6.    </configuration>

  7. </plugin>

failOnMissingWebXml需要开启为false,不然打包会报没有web.xml错误。

如何打war包?

打war包方式和打jar包方式一样,没有区别。

  • 在Maven中使用 mvn cleanpackage命令即可打包。

  • 在Idea中可以这样设置打包:

改在war包后,发现打war包比打jar要上好多。

jar包转war包有什么影响?

1、application配置文件中的server.xx等关于容器的配置就无效了,改配置需要在外部tomcat中进行。

2、Spring Boot的升级是否需要Tomcat跟着升级?需要观察。

3、打war包比打jar明显要变慢好多。。

暂时还没遇到其他问题,大家对此有什么看法都可以在下方留言。


觉得有用就转发分享一下吧


往期推荐

 

【1】排名前 16 的 Java 工具类

【2】44个Java代码性能优化总结

【3】MySQL 调优/优化的 101 个建议

【4】高级 Java 必须突破的 10 个知识点

【5】Java 10新特性将改变你写代码的方式


点击左下方的"阅读原文",入驻我们的Java技术栈“知识星球”。


可获取大量高级Java面试题答案、海量学习教程、技术资料等福利。


更有10年+大牛分享Java绝密实战知识,赶紧"阅读原文"上车!

长按关注,更多精彩!

点击阅读原文,更多技术干货!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存