Java 热部署的几种解决方案

一、spring-loaded

Maven依赖

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

ps:据说此方法还需要手动编译(IDEA 【Ctrl + Shift + F9】 Eclipse【Ctrl + S】),请亲测!

  1. 下载springloaded-1.2.5.RELEASE.jar,地址:https://github.com/spring-projects/spring-loaded

  2. 把springloaded-1.2.5.RELEASE.jar放到tomcat的bin文件夹下

  3. 打开bin下的catalina.bat文件中“setlocal”关键字下添加如下参数:
    set JAVA_OPTS=-javaagent:springloaded-1.2.5.RELEASE.jar -noverify

  4. 双击Servers视图Tomcat v7.0 Server at localhost服务器,点Modules,去掉Auto reloading enabled 勾选。

二、spring-boot-devtools

1、在项目中添加Maven依赖 spring-boot-devtools

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional> <!-- 表示依赖不会传递,之后依赖该module的项目如需继续使用,则需要再次引入 -->
</dependency>

2、在总工程的pom.xml里修改plugin插件信息,添加 configuration 扩展配置 forkaddResourcestrue;

<build>
    <fileName>你自己的工程名字<fileName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>
    </plugins>
</build>

3、IDEA不生效,配置启用自动生成

启动自动生成

4、IDEA不生效,按下 Ctrl+Shift+Alt+/ ,找到Registry,找到compiler.automake.allow.when.app.running勾选

Registry配置

配置勾选

三、JRebel

Intellij热部署插件JRebel,项目需求,一直用eclipse的我,也要改用IDEA了,一开始,很不习惯,经过几天的慢慢摸索和习惯之后,发现IDEA确实很好用,dark的界面是我喜欢的,智能的提示也让写代码不再枯燥。

遗憾的是IDEA本身没有集成热部署工具,一开始改动代码之后,都需要重新run或者debug,让开发效率大打折扣。经过一段时间的搜寻,发现JRebel是一个很好的热部署工具,在此记一笔,作为备忘录。

安装和使用JRebel需要注意两点:激活和设置

1、安装JRebel

1、在IDEA中一次点击 File->Settings->Plugins->Brows Repositories

2、在搜索框中输入JRebel进行搜索

3、找到JRebel for intellij

4、install

5、安装好之后需要restart IDEA

这里写图片描述

2、激活JRebel

JRebel并非免费的插件,需要激活之后才能使用。

  1. 首先到github上去下载一个反向代理软件,我下载的是windows x64版本。

    下载地址

    这里写图片描述

  2. 双击运行我们下载的程序

    这里写图片描述

  3. 在IDEA中一次点击 File->Settings->JRebel 并找到激活界面(因为我的已经激活了,点击change liense进入的激活界面,记不清一开始怎么进入的了)

    这里写图片描述

  4. 选择JRebel activated中的 connect to online licensing service

    第一行输入 http://127.0.0.1:8888/d3545f42-7b88-4a77-a2da-5242c46d4bc2

    第二行输入正确的邮箱格式,例如: test@123.com

    再点击以下change liense 按钮验证激活

    提示:d3545f42-7b88-4a77-a2da-5242c46d4bc2为UUID,可以自己生成,并且必须是UUID才能通过验证

    这里写图片描述

  5. 最后别忘了把JRebel设置为offline模式 点一下work offline

    这里写图片描述

3、相关设置

此时虽然安装好了JRebel并成功激活了,但是我们使用JRebel debug的时候,发现修改代码后,热部署不起作用。因为还需要设置两个地方

  1. 设置项目自动编译

    这里写图片描述

  2. 设置 compiler.automake.allow.when.app.running

    ctrl+shift+alt+/ 或者 help->find action…打开->搜索registry

    找到 compiler.automake.allow.when.app.running 并✔

    这里写图片描述

四、模板热部署

在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引擎的缓存,如下:

Thymeleaf的配置:

spring.thymeleaf.cache=false

FreeMarker的配置:

spring.freemarker.cache=false

Groovy的配置:

spring.groovy.template.cache=false

Velocity的配置:

spring.velocity.cache=false

五、对比

方式效果
spring-loaded需手动编译
spring-boot-devtools会重新加载整个应用
JRebel只加载修改类(当有错误时不会)。无需手动编译,不会重新加载整个应用

六、参考文章

SpringBoot初始教程之热部署(五)

IntelliJ IDEA 热部署插件 JRebel 安装激活及使用

intellij idea 热部署 jrebel 详细配置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值