SpringBoot 热部署、项目发布

概述

1、场景:本地调试、线上发布都要重启服务器,重启服务器浪费了大量的开发、调式时间

PS:思考如何做到发布新程序不需要重启服务器?

2、优点:

(1)本地、线上都适用
(2)无需重启服务器

  • 提高开发、调式效率;
  • 提高发布、运维效率,降低运维成本

3、热部署与热加载

(1)联系:

  • 不重启服务器编译/部署项目
  • 基于java类加载实现

(2)区别:
① 部署方式

  • 热部署在服务器运行时重新部署项目
  • 热加载是在运行时重新加载class

② 实现原理

  • 热部署直接重新加载整个应用(占用内存和费时间)
  • 热加载是在运行时重新加载class
    PS:一个是针对整个应用;一个是针对类

③ 使用场景

  • 热部署更多的是在生产环境使用
  • 热加载更多的是在开发环境使用

4、原理解析

(1)类加载过程
在这里插入图片描述
(2)加载五个阶段
在这里插入图片描述① final 修饰不会触发初始化
② 对类进行反射调用,若为调用则会调用初始化
③ 初始化类,若父类未初始化,则会先初始化父类再初始化子类
④ 若程序自定义主类 main() 方法,则虚拟机会先初始化main方法所在类
⑤ java 1.7动态语言

(3)java 类加载器特点
① 由AppClass loader (系统类加载器)开始加载指定类
② 类加载器将任务交给其父,如果其父找不到,再由自己去加载
③ BootStrap Loader是最顶级的类加载器

(4)java类热部署方式
① 类的热加载:通过类的热加载实现热部署,继承java.lang.ClassLoader,重写findClass方法
在这里插入图片描述

② 配置 Tomcat:通过配置Tomcat实现热部署

  • 直接把项目web文件夹放在wepApp里
  • 在tomcat\conf\server.xml中的内部添加标签
  • 在tomcat\conf\Catalina\localhost中添加一个XML

SpringBoot热部署实现

1、使用Spring loaded实现:

(1)maven启动方式,在pom.xml中添加依赖,启动方式:
在这里插入图片描述

  • 启动方式一,需要提前装好maven,然后在命令行进入项目文件夹,输入mvn spring-boot:run
  • 启动方式二,需要提前下载好springloaded-1.2.6.RELEASE.jar,修改run configuration,编辑Arguments,如下
    在这里插入图片描述

2、使用spring-boot-devtools

在这里插入图片描述
PS:

  • 若idea 启用热部署,无法使用debug模式打断点调式,需要在pom.xml添加或修改以下配置:
<plugins>
	<!-- 启用热部署,支持debug断点配置 -->
	<plugin>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-maven-plugin</artifactId>
	    <configuration>
	        <fork>false</fork>
	    </configuration>
	</plugin>
</plugins>

SpringBoot 项目发布

1、构建Jar/War包,使用内置Tomcat,采用命令行运行SpringBoot程序

PS:Jar不打包静态文件,如html、js等前端文件,若为前后端分离项目,可用jar包方式;若前后端项目都在一起,则使用War包

2、构建War包,发布到外置Tomcat

(1)pom.xml加入以下依赖

<!-- Servlet web -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>		
	<scope>provided</scope>	 	
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <!--排除这个自带slf4j-log4j12 避免与我们引入的包冲突-->
   <exclusions>
       <exclusion>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-logging</artifactId>
       </exclusion>
       <exclusion>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-tomcat</artifactId>
       </exclusion>
   </exclusions>
</dependency>

(2)添加启动文件

package com.mall.api;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class ServletApiApplication extends SpringBootServletInitializer{
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		// TODO Auto-generated method stub
		return builder.sources(ApiApplication.class);
	}
}

PS:

  • 开发环境无法启动:则删除已有tomcat,重新部署启动
  • 若为jar包,只能用java application 或 spring boot 应用程序方式启动;而war包,除以上方式,还可用服务器(tomcat)方式启动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值