热部署插件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必须是一个独立的端口仅用于热部署,不要和其他端口共用,可以换个端口试试
相关推荐
桃子是唯一的水果6 分钟前
java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间
java·单例模式·maven
+7208 分钟前
如何在java中用httpclient实现rpc post 请求
java·开发语言·rpc
ybq195133454319 分钟前
javaEE-SpringBoot日志
java·spring boot·后端
火烧屁屁啦13 分钟前
【JavaEE进阶】图书管理系统 - 贰
java·spring
xzzd_jokelin13 分钟前
Spring AI 接入 DeepSeek:开启智能应用的新篇章
java·人工智能·spring·ai·大模型·rag·deepseek
刘什么洋啊Zz24 分钟前
剖析IO原理和零拷贝机制
java·运维·网络
卷心菜好6啊32 分钟前
特辣的海藻!2
java
心态与习惯34 分钟前
mac 下 java 调用 gurobi 不能加载 jar
java·jar·mac·cplex·gurobi
he2581935 分钟前
centOS 7.9 安装JDK MYSQL
java·mysql·centos
找了一圈尾巴1 小时前
Spring Boot 日志管理(官网文档解读)
java·spring boot