SpringBoot入门4

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34515002/article/details/82497857

参考:Spring Boot热部署

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

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

2、热部署的原理与实现

3、构建Spring Boot项目的流程

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

使用场景

本地调试

线上发布

热部署与热加载

1、联系和区别

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

          基于Java的类加载器实现

扫描二维码关注公众号,回复: 3653153 查看本文章

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

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

猜你喜欢

转载自blog.csdn.net/qq_34515002/article/details/82497857