SpringBoot系列——jar包与war包的部署

时间:2022-11-17 09:14:52

  前言

  Spring Boot支持传统部署和更现代的部署形式。jar跟war都支持,这里参考springboot参考手册学习记录

  两种方式

  jar

  springboot项目支持创建可执行Jar,参考手册第11.5. Creating an Executable Jar就有对这样的介绍,我这里充当一回搬运工(大家好,我是大自然勤劳的搬运工~~):

  我们通过创建一个完全自包含的可执行jar文件来完成我们的示例,该文件可以在生产环境中运行。可执行jar(有时称为“胖jar”)是包含编译类和代码需要运行的所有jar依赖项的归档文件

  要创建一个可执行jar,我们需要将spring-boot-maven-plugin添加到我们的pom.xml中。为此,在dependencies部分下面插入以下几行:

    <!--构建工具-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

  可以使用命令行来打包,或者使用Maven Projects来打包

SpringBoot系列——jar包与war包的部署

SpringBoot系列——jar包与war包的部署

  打包成功,在target目录下就会看到jar包

SpringBoot系列——jar包与war包的部署

  要运行该应用程序,cmd命令,进入到jar所在路径文件,使用 java -jar 命令;win下直接双击用java方式打开即可运行(Ctrl+C退出)

SpringBoot系列——jar包与war包的部署

   那么Linux下面如何部署运行呢?

=====Linux部署命令======
0、查看运行的项目 pgrep java | xargs ps 1、先kill掉旧服务 pkill -f myspringboot-0.0.1-SNAPSHOT 2、后台启动新服务(nohup后台运行,&后台运行的区别: 使用nohup运行程序: 结果默认会输出到nohup.out 使用Ctrl + C发送SIGINT信号,程序关闭 关闭session发送SIGHUP信号,程序免疫 使用&后台运行程序: 结果会输出到终端 使用Ctrl + C发送SIGINT信号,程序免疫 关闭session发送SIGHUP信号,程序关闭 ) nohup java -jar /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.jar & 如需输出日志 nohup java -jar /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.jar > /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.log & 3、查看日志 tail -f /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.log

 

 

   war

  springboot项目支持创建一个可部署的War文件,参考手册第92.1 Create a Deployable War File就有对这样的介绍,我这里充当一回搬运工(大家好,我是大自然勤劳的搬运工~~):

  由于Spring WebFlux并不严格依赖于Servlet API,并且应用程序默认部署在嵌入式反应器Netty服务器上,所以WebFlux应用程序不支持War部署。

  生成可部署war文件的第一步是提供SpringBootServletInitializer子类并覆盖其配置方法。这样做可以利用Spring Framework的Servlet 3.0支持,让您在Servlet容器启动应用程序时配置它。通常,您应该更新应用程序的主类以扩展SpringBootServletInitializer,如下例所示:

@SpringBootApplication
public class MyspringbootApplication  extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MyspringbootApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyspringbootApplication.class, args);
    }
}

 

  在创建springboot项目时,默认是jar包,如果是想要打成war包,需要修改pom.xml,<build>节点中增加<finalName>springboot</finalName>,打包方式跟生成路径跟jar的一样,这个过程的最后一步是确保嵌入的servlet容器不会干扰部署war文件的servlet容器。为此,需要将嵌入式servlet容器依赖项标记为所提供的。

<!--默认jar-->
<packaging>war</packaging>

<!--构建工具-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <!--设置war名-->
    <finalName>springboot</finalName>
</build>

 

SpringBoot系列——jar包与war包的部署

  得到war包后把它丢到服务容器里run起来就行了,要注意的是使用了外部容器,要记得改Tomcat的端口,在server.xml的Connector节点

 

  结束语

  打成war包丢到服务器里面运行启动报错,还不知道是什么问题,都是照着参考手册来的...,先记录到这里;推荐直接使用jar的方式运行,war报错的原因,有空再去研究。