热部署插件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 分钟前
Spring @Scope, @Lazy, @DependsOn, @Required, @Lookup
java·后端·spring
简诚7 分钟前
java实现RabbitMQ消息发送和接收功能(包含测试)
java·rabbitmq·java-rabbitmq
結城1 小时前
Spring Security如何拿到登录用户的信息
java·spring·mybatis
GalaxyPokemon2 小时前
LeetCode - 2. 两数相加
java·前端·javascript·算法·leetcode·职场和发展
dualven_in_csdn5 小时前
搞了两天的win7批处理脚本问题
java·linux·前端
C++chaofan7 小时前
74. 搜索二维矩阵
java·算法·leetcode·矩阵
诺浅8 小时前
AWS S3 SDK FOR JAVA 基本使用及如何兼容七牛云
java·spring boot·aws
迢迢星万里灬8 小时前
Java求职者面试:微服务技术与源码原理深度解析
java·spring cloud·微服务·dubbo·netty·分布式系统
KIDAKN8 小时前
java--怎么定义枚举类
java·开发语言
何中应8 小时前
第一个人工智能(AI)问答Demo
java·人工智能·语言模型