前言
将自己实现IDEA
+ WebLogic
热部署的过程整理成文章,作为备忘以及供有需要的人参考
为什么需要热部署
众所周知,我们编写的java
代码会被编译成class
文件,JVM
要创建一个类首先要加载该类,从对应的class
文件加载。
当我们改变类的某段代码,重新编译后对应的class
文件也会改变,这时重启应用新的改变就能被读取。
但是很多时候我们的应用是部署在Tomcat
,Weblogic
等服务器上的,每次改变代码后都需要重新部署以使改变生效,这无疑会花费大量时间
所以人们寻找一种改变代码后无需重新部署就可以让改变立刻生效的方法,也就是热部署
热部署原理
简单讲热部署就是动态的替换class
文件
某个进程监控本地所有指定的class
文件,一旦发现某个class
产生变化,就将服务器中对应的class
进行更新以使改变生效而无需重新部署
可是JVM
怎么对某个class
进行多次加载呢,其实JVM
标识一个类是和这个类的类加载器一起,也就是说,即使同一个类,但由不同类加载器加载进来,JVM
就认为它们是不同的
所以热部署的一种实现就是将相应的类和类加载器一起替换掉
过程
首先使用的是IDEA Ultimate
版,使是Jrebel
插件为我们执行监控和替换class
文件的操作
-
安装好
Jrebel
后首先在IDEA
的设置里找到Jrebel
的配置,打开自动编译
-
IDEA
左下角,为项目开启热部署
-
删除已有部署
-
创建
WebLogic Server
刚创建Server你会发现没有图中那么多选项,因为你首先要在Deployment
面板中添加Artifact
,如步骤5
-
添加
Artifact
-
配置
Jrebel Executor
主要是指定配置文件位置,将之前在WebLogic
配置的Server的Server Start
中对应参数复制过来即可
-
复制
boot
文件
如果部署在Managed Server
中,则需要将Admin Server
中boot
文件复制过来,其实里面包含的就是加密后的用户名和密码
-
启动
配置好热部署就无需手动在WebLogic
的网页上启动Server
,只需在IDEA
中点一下Jrebel
图标即可,当弹出403
页面则启动成功
-
测试类的热部署
有时候我们需要把测试类也实时同步到服务器,但上面的操作却不会监测测试类的变动并同步因为
Jrebel
监测classes
目录的变化,而测试类编译后存放在test-classes
中,所以只需要改变测试类的输出路径就可以实现同步IDEA -> Project Structure