springboot打包是指什么?有何作用?

2020-04-29 10:51:25 java常见问答 10428

现在要说到目前java软件开发行业中比较流行的框架,springboot必须得拥有姓名,那么你了解springboot打包是指什么吗?知道是用在何处的吗?有兴趣的小伙伴可以跟小编一起来看看哦。

首先我们要知道springboot应用程序有两种运行方式,分别是以jar包方式运行和以war包方式运行。那么在实际的项目中,并没有说哪一种方式是最好的,只是根据客户不同的需求制定不同的部署方案,比如说有些客户可能比较看中管理功能,就会要求数据源和tomcat相关配置必须由管理员去进行管理,那么选择war包方式,但也有些客户希望借助容器化进行大规模部署,那么jar方式可能更适合。其实不管选择哪种方式,在部署时都会遇到下面的问题:

如果是需要打war包,那么不仅是pom文件需要修改,应用程序也要做相应的改动,改动完后呢,应用程序就无法在本地运行了,需要打完包后将配置信息修改回来,这样的话不仅麻烦,还容易出错。

不管是war包还是jar包,如何管理不同环境的配置文件,保证不会出错,虽然spring boot有提供spring.profiles.active配置设置不同的环境,但一方面需要人为修改配置文件,只要是人为的就有可能出错,另一方面,客户有时候出于安全考虑不会提供生产环境配置信息,那么这时候就无法指定prifiles.active了。

如何将多个spring boot模块打包在一起?这是个问题。

jar包需要配合容器化才能发挥出最大的优势,如果说没有容器,spring boot jar包就是一个玩具也不为过,随处运行的jar包,缺少统一管理,是达不到生产的要求,那么如果从jar包到容器也是一个问题。

我们早期碰到这些问题,都是人工解决的,这样不仅效率十分低下,而且部署一次都需要十几分钟,是很容易出错的,一百次出错一次都算是概率低了,但是生产出错一次都是重大事件哦,所以我们也在思考如何通过自动化解决以上问题,如何将开发和部署分离,开发人员只关心开发,开发完提交代码,打包和部署都是后台透明的完成。下面呢就是解决方案的示例了。

spring boot打war包的步骤如下

  1. 在pom.xml中将打包方式改为war。

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ...
    
    <packaging>war</packaging>
    ...

</project>

2.设置spring-boot-starter-tomcat范围为provided

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

3.修改spring boot的启动类,继承SpringBootServletInitializer

public class DemoApplication extends SpringBootServletInitializer
{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
    {
        return builder.sources(DemoApplication.class);
    }
}

每打包一次都要修改pom.xml和启动类,打包完再修改回来,十分的繁琐,因为,我们提出以下整改方案

从pom.xml复制一个pom-war.xml文件,将pom-war.xml修改为war包配置

在根目录下(除了src目录外都可以)复制一份启动类的代码,修改为war包的配置方式。

编写shell脚本进行打包。

shell脚本打包过程为

备份当前启动类的java代码。

将war包启动类的代码替换掉当前启动类的代码。

maven指定pom-war.xml文件进行打包。

打包结束后恢复启动类文件。

以下就是参考脚本了:

app-war.sh

#!/usr/bin/env bash
v1=src/main/java/com/definesys/demo/DemoApplication.java
v2=war/DemoApplication.java
v3=war/DemoApplication-bak.java
cp -rf $v2 $v1
mvn clean package -Dmaven.test.skip=true -f war-pom.xml
#recovery

通过预先配置好pom文件和启动类文件,开发人员只要运行app-war.sh脚本无需修改任何文件即可生成war包。

那么以上就是本篇文章的所有内容了,还想了解更多java架构师相关信息,就记得赶快来关注本站消息哦。