SpringBoot(六):springboot热部署

摘要:
在SpringBoot开发生态系统中,SpringBoot热部署的常见插件是spring-boot-devtools。启动spring-boot项目后,继续修改代码。在不手动重新启动spring boot项目的情况下,编译修改后的代码以验证其是否有效。3) 修改HelloWordController Java:将打印内容更改为“hello-springboot”,编译“”控件类,并在浏览器中访问它http://localhost:8080/index要查看控制台打印信息。此时,发现打印信息仍然是“hello spring boot”,这表明热部署已经生效。

在j2ee项目开发中,热部署插件是JRebel。JRebel的使用为开发人员带来了极大的帮助,且挺高了开发便捷。而在SpringBoot开发生态环境中,SpringBoot热部署常用插件是:spring-boot-devtools。下边将会学习devtools的用法。

注意:springboot不只支持devtools热部署插件,还支持springloaded方式。

如何使用spring-boot-devtools?

需要在springboot的pom.xml中引入:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>

如何验证spring-boot-devtools起效?

当启动springboot工程后,继续修改代码,在不重新手动启动springboot工程的情况下,编译修改的代码,验证是否起效。

1)在springboot工程中,新建一个HelloWordController.java控制类,在控制类中打印“hello-word”

SpringBoot(六):springboot热部署第1张

2)运行springboot入口方法,来启动springboot工程,并在浏览器中浏览地址http://localhost:8080/index,查看打印信息。

SpringBoot入口函数类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("com.dx.controller")
@EnableAutoConfiguration
public class ApplicationStarter {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStarter.class, args);
    }
}

运行main函数,成功启动了springboot工程,之后浏览器访问http://localhost:8080后,控制台打印了“hello word”信息。

3)修改HelloWordController.java:把打印内容修改为“hello-springboot”,并编译“SpringBoot(六):springboot热部署第2张”该控制类,在浏览器中(不重启springboot服务器的情况下)访问http://localhost:8080/index,查看控制台打印信息。此时发现打印信息依然是“hello word”,并未自动编译。

4)在工程pom.xml追加“spring-boot-devtools”依赖,并把HelloWordController.java打印信息修改回为“hello word”,在浏览器中访问http://localhost:8080/index,此时控制台打印信息为“hello word”。

5)修改HelloWordController.java:把打印内容修改为“hello-springboot”,并编译“SpringBoot(六):springboot热部署第2张”该控制类,在浏览器中(不重启springboot服务器的情况下)访问http://localhost:8080/index,查看控制台打印信息。此时发现打印信息依然是“hello springboot”,这就说明热部署已经起效。

spring-boot-devtools原理:

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

注意:这里边如果是类发生了变化,是发生了较快的重启,而不是不重启springboot服务。

spring-boot-devtools参数配置:

1)排除资源与包括资源:

在applicaiton.properties中添加配置:

spring.devtools.restart.exclude=static/**,templates/**
spring.devtools.restart.additional-exclude=public/** (处理默认配置排除之外的)
spring.devtools.restart.enabled=false (禁止自动重启)

2)可以使用trigger.file的重启策略:

在applicaiton.properties中添加配置:

spring.devtools.restart.triggerFile=trigger.file

注意:这个文件不要放到default_excludes目录下,一般情况下放到resources文件下。

IDEA配置实现Ctrl+S保存后自动编译:

Eclipse默认自动编译,而idea默认手动编译,因此idea需要修改两个参数以达到任意时间自动编译的目的。

1)IDEA下File-Settings-Compiler-Build Project automatically(注意后面only works not running/debugging,所以要实现热部署就必须打破这个限制,于是乎有了下面设置)

SpringBoot(六):springboot热部署第4张

2)ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

SpringBoot(六):springboot热部署第5张

测试

  • 修改类–>保存:应用会重启
  • 修改配置文件–>保存:应用会重启
  • 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)

免责声明:文章转载自《SpringBoot(六):springboot热部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LINUX grepnet core体系-网络数据采集(AngleSharp)-1初探下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

四、安装es-head插件

此时,es数据库可以通过弹性搜索头等第三方插件进行管理。在5.0版本之前,弹性搜索头插件可以以插件的形式直接安装。5.0版之后,需要支持nodejs环境,并且需要安装nodejs。这里使用源代码来安装npm,可以立即解压并使用。...

es6 解构赋值

functiondemo(){return{"name":"张三","age":21}}var{name,age}=demo();console.log;//结果:张三console.log;//结果:21三、定义函数参数functiondemo{console.log;console.log;console.log;}demo;四、函数参数的默认值传统的参...

解决安卓手机连接wifi总弹出“已登录到Wlan网络”

一些Android机型在连接到wifi时会不断提示,“如果你不小心打开了这个提示,你会跳转到一些广告网站。这是因为谷歌服务器会在本地Android系统通电后发送连接请求。”。一些手机制造商的工程师将此连接服务器设置到一些广告网站并登录网络“我们可以管理设备或手机模拟器的状态,还可以执行许多手机操作,如安装软件、升级系统、运行shell命令等。adb是连接安卓...

C# AES的128位、192位、256位加密

这里将不解释C#AES的128位、192位和256位加密原理。这里我们主要讨论AES的CBC加密模式中128位、192位和256位加密之间的差异,并参考对称加密和块加密的四种模式。16位密钥对应128位加密,24位密钥对应192位加密,32位密钥对应256位加密,矢量必须为16位。“);ifthrownewException(”指定的密钥长度不能小于16位。...

移动端媒体查询的一些尺寸参考

device-width是设备实际的宽度,不会随着屏幕的旋转而改变,因此并不适合开发响应式网站。比如iphone5s的屏幕分辨率宽为640,由于retina显示策略,当scale设置为1的时候,对应的media中取到的width为320,当scale设置为0.5的时候,width为640,而device-width始终是320。总结1.device-widt...

element ui设置表格表头高度和每一行的高度

.el-table__headertr,.el-table__headerth{padding:0;height:30px;line-height:30px;}.el-table__bodytr,.el-table__bodytd{padding:0;height:30px;line-height:30px;}...