Spring Boot实现热部署

Stella981
• 阅读 534

在Spring Boot实现代码热部署是一件很简单的事情,代码的修改可以自动部署并重新热启动项目。

引用devtools依赖

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

这样,当修改一个java类时就会热更新。

自定义配置热部署

以下配置用于自定义配置热部署,可以不设置。

# 热部署开关,false即不启用热部署
spring.devtools.restart.enabled: true

# 指定热部署的目录
#spring.devtools.restart.additional-paths: src/main/java

# 指定目录不更新
spring.devtools.restart.exclude: test/**

Intellij Idea修改

如果是idea,需要改以下两个地方:

1、勾上自动编译或者手动重新编译

File > Settings > Compiler-Build Project automatically

2、注册

ctrl + shift + alt + / > Registry > 勾选Compiler autoMake allow when app running

注意事项

1、生产环境devtools将被禁用,如java -jar方式或者自定义的类加载器等都会识别为生产环境。

2、打包应用默认不会包含devtools,除非你禁用SpringBoot Maven插件的excludeDevtools属性。

3、Thymeleaf无需配置spring.thymeleaf.cache: false,devtools默认会自动设置,点击参考完整属性。

下面是devtools自动配置的部分源码:

@Order(Ordered.LOWEST_PRECEDENCE)
public class DevToolsPropertyDefaultsPostProcessor implements EnvironmentPostProcessor {

    private static final Map<String, Object> PROPERTIES;

    static {
        Map<String, Object> properties = new HashMap<String, Object>();
        properties.put("spring.thymeleaf.cache", "false");
        properties.put("spring.freemarker.cache", "false");
        properties.put("spring.groovy.template.cache", "false");
        properties.put("spring.mustache.cache", "false");
        properties.put("server.session.persistent", "true");
        properties.put("spring.h2.console.enabled", "true");
        properties.put("spring.resources.cache-period", "0");
        properties.put("spring.resources.chain.cache", "false");
        properties.put("spring.template.provider.cache", "false");
        properties.put("spring.mvc.log-resolved-exception", "true");
        properties.put("server.jsp-servlet.init-parameters.development", "true");
        PROPERTIES = Collections.unmodifiableMap(properties);
    }

4、devtools会在windows资源管理器占用java进程,在开发工具里面杀不掉,只能手动kill掉,不然重启会选成端口重复绑定报错。

关于boot-devtools更多详细用法,点击参考官方文档。

推荐:Spring Boot & Cloud 最强技术教程

扫描关注我们的微信公众号,干货每天更新。

Spring Boot实现热部署

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
菜鸟阿都 菜鸟阿都
2年前
SpringBoot项目热部署
前言   此篇文章主要介绍两种springboot项目热部署的方式,方式一是通过引入devtool组件实现热部署,方式二是通过idea下载jrebel插件实现热部署,jrebel免费试用30天,但通过激活网站可获得jrebel激活序列码,阿都对两种方式都进行了测试,全部有效。一、devtool组件热部署实现原理:自动重启项目1.添加devtools依赖
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
springboot热部署实战
每次代码改动后都需要重新手动Run项目,心累,在网上找了下,发现SpringBoot提供了热部署的方案,改动代码后自动编译打包,现在将热部署的配置方法记下来:第一步:在pom.xml中添加依赖,导入springbootdevtools<dependency<groupIdorg.springframework
Stella981 Stella981
2年前
Spring Boot 开发应用热部署
springbootdevtools实现热部署想在SpringBoot中使用该功能非常简单,添加依赖:<!热部署模块<dependency<groupIdorg.springframework.boot</groupId
Stella981 Stella981
2年前
SpringBoot热部署与启动速度优化
SpringBoot热部署  默认情况下SpringBoot是不支持热部署的,所以当每次修改代码的时候,都需要重新启动服务器,这个是非常浪费时间的,所以可以在pom.xml文件里面导入以下依赖1<dependency2<groupIdorg.springframework.boot</groupId
Stella981 Stella981
2年前
IDEA中Spring boot配置热部署无效问题解决方式(转)
IDEA中Springboot配置热部署无效问题解决方式2018年01月31日20:30:59阅读数:1426该配置方式属于通过配置devtools实现热部署只要在pom文件中添加下面代码段即可<!热部署<dependency<groupIdo
Easter79 Easter79
2年前
SpringBoot热部署与启动速度优化
SpringBoot热部署  默认情况下SpringBoot是不支持热部署的,所以当每次修改代码的时候,都需要重新启动服务器,这个是非常浪费时间的,所以可以在pom.xml文件里面导入以下依赖1<dependency2<groupIdorg.springframework.boot</groupId
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这