Java笔记:SpringBoot热部署与热加载

简介: Java笔记:SpringBoot热部署与热加载

课程介绍

1、热部署使用场景

  • 本地调试
  • 线上发布

2、优点

  • 本地、线上都适用
  • 无需重启服务器

3、前置知识

  • Java语言
  • Spring开发经验
  • 构建SpringBoot项目

4、课程大纲

  • 热部署原理分析
  • 案例分析
  • 项目演示
  • 测试
  • 发布程序

热部署与热加载

1、Java热部署与热加载联系

  • 不重启服务器编译/部署项目
  • 基于Java的类加载器实现
  • 课程总结

2、Java热部署与热加载区别

2.1、部署方式

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

2.2、实现原理

  • 热部署直接重新加载整个应用
  • 热加载在运行时重新加载class

2.3、使用场景

  • 热部署多用于生产环境
  • 热加载多用于开发环境

热部署原理解析

1、Java类加载过程

初始化JVM
-> 产生启动类加载器(子类,自动加载)
-> 标准扩展类加载器
-> 系统类加载器
-> 加载class文件

2、类加载的5个阶段

加载 允许用户参与
验证
准备
解析
初始化

3、初始化时机5个

1、new (final修饰的类会放在常量池)
2、反射
3、初始化类的时候其父类没有初始化
4、主类
5、static


4、Java类加载器特点

  • 由AppClass Loader(系统类加载器)开始加载执行的类
  • 类加载器将加载任务交给其父,如果其父找不到,再由自己去加载
  • Bootstrap Loader(启动类加载器)是最顶级的类加载器

5、Java类的热部署


类的热加载实现

配置Tomcat实现热部署

直接把项目web文件夹放在webapps里

在tomcat\conf\server.xml中 <host></host>内部添加<Context/>标签

在%tomcat_home%\conf\Catalina\localhost中添加一个XML


tomcat\conf\server.xml


<Context  path="/hot" docBase="webapps" crossContext="true" debug="0" privileged="true"  reloadable="true">

</Context>


tomcat\conf\Catalina\localhost\demo.xml


使用文件名作为路径名


<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="websites"  reloadable="true"/>


Java类热加载案例分析

实现:

1、类层次结构清晰,修改某一个java类文件不需要重启服务或者重新编译运行程序

2、可以适当的运用一些设计模式使代码结构更加清晰明了,比如工厂模式

核心类MyClassLoader

SpringBoot

简化开发,库的集合

Restful、微服务

spring-tool-suite

Spring Boot热部署的实现

方式:

  1. Spring Loaded
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <!-- https://mvnrepository.com/artifact/org.springframework/springloaded -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.8.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

运行项目

$ mvn spring-boot:run
• 1
  1. Spring-boot-devtools
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

IDEA修改项目文件后需要重新编译

SpringBoot发布方式

  • 构建Jar包,命令行运行SpringBoot程序
  • 构建war包,发布到Tomcat

1、构建Jar包


# 打包

$ mvn package


# 运行

$ java -jar target/demo-0.0.1-SNAPSHOT.jar



2、构建war包


(1)修改配置文件3处


<packaging>war</packaging>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<build>
    <!--生成war包的名称-->
    <finalName>demoapp</finalName>
</build>



(2) 新建类,Application为主类名


package com.example.demo;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}



打包


$ mvn clean package


将打包后的war包放入webapps目录下,会自动解压


还可以在新建SpringBoot项目的时候直接选择war包方式


遇到的问题:

使用 Apache Tomcat/7.0.100没有访问成功 出现404


Apache Tomcat/9.0.39 可以成功访问到


相关文章
|
1月前
|
存储 Java 开发者
【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
本文详细介绍了 Java 中 `toString()` 方法的重写技巧及其重要
56 10
【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
|
1月前
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
95 33
|
1月前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
63 6
|
1月前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
46 5
|
1月前
|
前端开发 JavaScript Java
Java构建工具-maven的复习笔记【适用于复习】
这篇文档由「潜意识Java」创作,主要介绍Maven的相关知识。内容涵盖Maven的基本概念、作用、项目导入步骤、依赖管理(包括依赖配置、代码示例、总结)、依赖传递、依赖范围以及依赖的生命周期等七个方面。作者擅长前端开发,秉持“得之坦然,失之淡然”的座右铭。期待您的点赞、关注和收藏,这将是作者持续创作的动力! [个人主页](https://blog.csdn.net/weixin_73355603?spm=1000.2115.3001.5343)
42 3
|
1月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
64 2
|
1月前
|
监控 Java API
【潜意识Java】使用SpringBoot构建高效的RESTfulAPI
本文介绍了使用Spring Boot构建RESTful API的完整流程,涵盖从项目创建到API测试的各个步骤。
51 1
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
539 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
168 0
创建springboot项目的基本流程——以宠物类别为例

热门文章

最新文章