热部署插件HotSeconds安装教程(萌新版)

最近很多小伙伴反馈Github文档HotSecondsIDEA上的安装教程看完之后还是不知道怎么安装,甚至有些同学不知道怎么添加jvm参数,也不知道怎么看是否启动,Github文档的确默认是有两年工作经验左右的同学,这里出一份萌新级别的教程,如果看完之后还不懂可以留言。

1. 本地热部署

这里以Java8安装为例子,简单介绍一下Java8是怎么安装的,Java11和Java17比这个还要简单。

1.1 本地热部署服务端安装

首先下载HotSecondsServer.zip解压到本地,随便哪个目录都行,我这里放到工程目录下

打开hot-seconds-remote.xml,可以看到secret,remote_port和classloader配置,分别表示密钥,启动端口和应用程序所需要的classloader。

字段 解释
secret 这个随便填就行,客户端用这个secret和服务端连接
remote_port 服务端启动端口,这个端口专门用于热部署通信,不要和其他端口共用,千万不要用什么8080,80端口,建议保留2023端口即可
classloader 本地main函数启动的都默认AppClassLoader即可,SpringBoot本地也用AppClassLoader,如果是Tomcat7用WebappClassLoader,Tomcat8及以上用ParallelWebappClassLoader

然后上dcevm下载JDK对应版本的补丁,看看自己的JDK版本,和补丁要求的版本保持一致,建议用JDK1.8.0_181,如果你的JDK版本高于这个版本建议再装一个,Oracle JDK和OpenJDK都可以。

下载下来之后,运行这个jar进行安装,选择你的jdk版本,然后再选择Install DCEVM as altjvm

安装完之后,输入java -XXaltjvm=dcevm -version,得到下图结果说明是安装成功了

然后在你的应用程序选择Edit Configurations

然后按图所示,添加jvm参数

以下jvm参数仅供参考,HotSecondsServer.jar和hot-seconds-remote.xml的路径可以填绝对路径和相对路径

ini 复制代码
-XXaltjvm=dcevm -javaagent:./HotSecondsServer/HotSecondsServer.jar=hotconf=./HotSecondsServer/hot-seconds-remote.xml

最后点击Run或者Debug启动你的应用程序,启动程序后看看上面配置的remote_port是否起来了。

1.2 客户端配置

插件商城搜索HotSecondsClient并安装

可以看到Debug右边多了三个图标

点最右边的配置图标,不习惯英文的同学可以先换成中文

打开配置框,按下图配置

如果有用到mybatis的同学可以配置一个xml,本地路径和远程路径都填一样的,$rootPath$是个变量,表示当前工程的根目录,也可以填绝对路径。

填完后,点击小人头像,连接刚刚启动的服务端

然后就可以在java文件上右键,或者在配置文件上右键(在上面配置的路径映射下的文件),选择热部署此文件到远程,进行热部署了。上面有个远程编译并热部署,对于本地热部署来说没有多大区别,用一下试试就知道了。

点击中间的云同步图标,可以批量热部署修改过的文件

2. Linux 远程热部署

2.1 服务端安装

下载HotSecondsServer.zip到本地解压,然后去libjvm.so找对应的jdk版本下载完后无需改名直接放到解压后目录的./lib下,然后上传到服务器某个目录(记目录为$path1),在服务器上执行sh install.sh

如果成功了,输入java -XXaltjvm=dcevm -version 会得到下图的效果

将hot-seconds-remote.xml复制到代码的resource目录(随便找个目录都行),后续hot-seconds-remote.xml会部署到服务器上,假设服务器上hot-seconds-remote.xml所在的目录为$path2),根据需要修改配置

字段 解释
secret 这个随便填就行,客户端用这个secret和服务端连接
remote_port 服务端启动端口,这个端口专门用于热部署通信,不要和其他端口共用,千万不要用什么8080,80端口,建议保留2023端口即可
classloader 普通项目填AppClassLoader即可,SpringBoot用LaunchedURLClassLoader,Tomcat7用WebappClassLoader,Tomcat8及以上用ParallelWebappClassLoader

然后添加jvm参数

ini 复制代码
-XXaltjvm=dcevm -javaagent:$path1/HotSecondsServer.jar=hotconf=$path2/hot-seconds-remote.xml

这个jvm参数一般是在你的代码的配置文件能配置的,记住jvm参数不是main函数的args,和-Xms -Xmx一样都是属于jvm启动前就需要配置的jvm属性,另外如果有-server参数的,一定要把这个jvm参数放到-server的后面,比如 java -server -XXaltjvm...。

这里面$path1$path2都是刚才提到的目录。

一个完整的例子:

bash 复制代码
java -XXaltjvm=dcevm -javaagent:/tmp/HotSecondsServer.jar=hotconf/tmp/hot-seconds-remote.xml -jar SpringBootMain.jar

一定要放到-jar之前才叫jvm参数,不能放到-jar之后

然后部署你的项目到Linux服务器上,一般每个公司都有自己的部署平台,部署完之后,刚才加的jvm参数会加载HotSecondsServer.jar,启动后可以用 lsof -i:2023 看看端口是否启动,这里的2023替换为你在hot-seconds-remote.xml中配置的remote_port,如果有这个端口说明启动成功。

如果端口没启动怎么办

  • 没有加jvm参数 : -XXaltjvm=dcevm -javaagent...
  • 服务器启动失败,看报错日志,比如端口被占用等原因

2.2 客户端安装

IDEA插件商城搜索HotSecondsClient并安装

可以看到Debug右边多了三个图标

点最右边的配置图标,不习惯英文的同学可以先换成中文

打开配置框,按下图配置

如果是class则无需配置,有用到mybatis的同学可以配置一个xml,本地路径$rootPath$是个变量,表示当前工程的根目录,也可以填绝对路径,远程路径一定要填绝对路径,表示上传到哪个目录,这个远程目录随意写。

填完后,点击小人头像,连接远程服务端

然后就可以在java文件上右键,或者在配置文件上右键(在上面配置的路径映射下的文件),选择热部署此文件到远程,就可以热部署了。上面有个远程编译并热部署,这个是在服务端编译并热部署的。

点击中间的云同步图标,可以批量热部署修改过的文件

如果连接远程服务器失败怎么办

  • 先看上文 如果端口没启动怎么办,确保服务端端口已经起来了
  • 连接服务器失败报错,但是报错提示的ip和配置的远程ip并不一致,比如远程ip为10.127.11.111,但是报错ip为127.0.0.1,这个原因是服务器的host配置问题,输入hostname -i可以看到配置的host,这个问题的解决方案是,在服务端加上jvm参数 -Djava.rmi.server.hostname=远程ip
  • 报错non-JRMP server at remote endpoint,配置里面的remote_port和其他端口共用了,remote_port必须是一个独立的端口仅用于热部署,不要和其他端口共用,可以换个端口试试
相关推荐
张哈大1 小时前
【 java 虚拟机知识 第一篇 】
java·开发语言·jvm·笔记·缓存
卑微的Coder5 小时前
Redis Set集合命令、内部编码及应用场景(详细)
java·数据库·redis
CrissChan6 小时前
Pycharm 函数注释
java·前端·pycharm
启航挨踢6 小时前
java学习电子书推荐
java
wgslucky6 小时前
Dubbo报错:module java.base does not “opens java.lang“ to unnamed module
java·开发语言·dubbo
DougLiang8 小时前
关于easyexcel动态下拉选问题处理
java·开发语言
mochensage8 小时前
C++信息学竞赛中常用函数的一般用法
java·c++·算法
计蒙不吃鱼8 小时前
一篇文章实现Android图片拼接并保存至相册
android·java·前端
小海编码日记9 小时前
Java八股-JVM & GC
java
全职计算机毕业设计9 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端