热部署插件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必须是一个独立的端口仅用于热部署,不要和其他端口共用,可以换个端口试试
相关推荐
@ chen16 小时前
IDEA初始化配置
java·ide·intellij-idea
wellc17 小时前
SpringBoot集成Flowable
java·spring boot·后端
Hui Baby18 小时前
springAi+MCP三种
java
hsjcjh18 小时前
【MySQL】C# 连接MySQL
java
敖正炀18 小时前
LinkedBlockingDeque详解
java
wangyadong31718 小时前
datagrip 链接mysql 报错
java
untE EADO18 小时前
Tomcat的server.xml配置详解
xml·java·tomcat
ictI CABL18 小时前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀18 小时前
DelayQueue 详解
java
敖正炀19 小时前
PriorityBlockingQueue 详解
java