SpringBoot入门4——热部署

参考:Spring Boot热部署

参考代码:https://img.mukewang.com/down/5a73fba7000110f900000000.zip

1、热部署与热加载的联系和区别

2、热部署的原理与实现

3、构建Spring Boot项目的流程

4、Spring Boot热部署的实现与发布方式

使用场景

本地调试

线上发布

热部署与热加载

1、联系和区别

联系:不重启服务器编译/部署项目

          基于Java的类加载器实现

部署方式:热部署在服务器运行时重新部署项目。

               热加载在运行时重新加载class

实现原理:热部署直接重新加载整个应用

                 热加载

 热部署热加载
编译/部署项目不重启服务器不重启服务器
实现基于Java的类加载器实现基于Java的类加载器实现
部署方式在服务器运行时重新部署项目在运行时重新加载class
实现原理直接重新加载整个应用在运行时重新加载class
使用场景更多的是在生产环境中使用更多的是在开发环境使用

热部署原理解析

Java类的加载过程

1初始化JVM 
2产生启动类加载器子类,自动加载
3标准扩展类加载器子类,自动加载
4系统类加载器 
5加载class文件交给其父类加载

类加载的5个阶段:

序号阶段备注
1加载 
2验证 
3准备 
4解析 
5初始化 

Java类加载器的特点:

1、由AppClassLoader(系统类加载器),开始加载指定的类

2、类加载器将加载任务交给其父,如果其父找不到,再由自己去加载

3、Bootstrap Loader(启动类加载器)是最顶级的类加载器。

Java类的热部署:

1、类的热加载

2、配置Tomcat

通过类的热加载实现热部署

通过配置Tomcat实现热部署

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

2、在tomcat\conf\server.xml中的<host>内部添加<context/>标签。

<Context debug="0" docBase="D:/Imooc/web" path="/hot" privileged="true" reloadable="true"/>

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

hot.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context  docBase="D:/Imooc/web"   reloadable="true"/>

JAVA类热加载案例分析

 *.java介绍
1MyClassLoader.java核心类。自定义Java类加载器来实现Java类的热加载。继承于ClassLoader
2BaseManager.java接口。实现这个接口的子类需要动态更新
3MyManager.javaBaseManager的子类。此类需要实现java类的热加载功能
4LoadInfo.java封装加载类的信息
5ManagerFactory.java加载manager的工厂
6MsgHandler.java后台启动一条现场不断刷新重新加载实现了热加载的类
7ClassLoaderTest.java测试java类的热加载

 

我没有实现热加载的现象。

SpringBoot创建项目

创建一个项目,并打印“Hello!”

过程略。

SpringBoot热部署的实现

1、Spring Loaded

2、spring-boot-devtools

Springloaded热部署实现

1、Maven启动方式,在pom.xml添加依赖

1) 在pom.xml的build中添加dependency

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>

				<dependencies>
					<dependency>
						<groupId>org.springframework</groupId>
						<artifactId>springloaded</artifactId>
						<version>1.2.6.RELEASE</version>
					</dependency>
				</dependencies>

			</plugin>
		</plugins>
	</build>

2) window的CMD窗口,到项目的目录下,运行命令:mvn spring-boot:run

启动的好慢。

运行项目正常,但是没有热启动的现象。

IDEA自动编译参考:https://www.cnblogs.com/jiangbei/p/8439394.html

仍然没有热启动的现象。

2、run as -java application

1)下载jar包

2)run configuration

VM options: -javaagent:D:\mvnrepo\repository\org\springframework\springloaded\1.2.6.RELEASE\springloaded-1.2.6.RELEASE.jar -noverify

-->Apply->RUN

运行项目正常,运行项目正常,刷新URL然后报错。

HTTP Status 500 – Internal Server Error

 

spring-boot-devtools热部署实现

pom.xml添加依赖:

<dependency><!-- 热部署依赖 -->
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional>
</dependency>

运行正常,热部署正常。

发布方式

1、构建Jar包,命令行运行Spring Boot程序

2、构建War包,发布到Tomcat

构建Jar包

1、IDEA:右边的Maven Projects->install

Eclipse: Run As->Maven install

2、运行jar包:到目录下,运行: java -jar demo.jar

构建War包

1、添加tomcat依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>test</scope>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-core</artifactId>
</dependency>

2、修改代码HotbuilderApplication.java

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

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

3、IDEA:右边的Maven Projects->install

生成WAR包,

将此WAR包放到apache-tomcat-9.0.11\webapps\里。

启动tomcat:apache-tomcat-9.0.11\bin\start.bat

URL:http://localhost:8080/say

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值