不停服热加载java代码

本文介绍了如何在不重启服务器的情况下,使用Java实现代码的热加载,特别是针对数据库操作的Procedure进行替换。通过创建新的Procedure子类,打包成jar,修改配置文件,利用自定义ClassLoader加载新类,从而实现不停服的热更新。
摘要由CSDN通过智能技术生成

        我司自研的key-value数据库Xdb支持锁和事务,还是非常好用的,不过Xdb有一个问题就是死锁,尤其是频繁出现的死锁,基本上玩家啥都干不了了,只有重启.虽然程序员应该负责消灭所有死锁,但是这仅仅是理论上的可能.很多开发的task时间紧任务重,想要完美避免死锁很难. 不过xdb的这套体系也有两个优点:1逻辑和数据基本上是分离的,也就是说,不存在一个类即做逻辑又负责保存玩家数据;2 所有对数据的操作都通过Procedure来执行,而Procedure又有一个统一的入口方法Process.这使得热替换一个Procedure成为了可能.

下面演示一下怎么写一个新的Procedure替换旧的,并在服务器开着的情况下加载执行:

1.比如常用的加经验Procedure PAddExpProc,我想新写一个PAddExpProc2,来在线替换之前的PAddExpProc,第一步自然是新建一个Procedure的子类PAddExpProc2:


注意PAddExpProc2类的构造函数跟之前的PAddExpProc不一样,因为每个Procedure的子类的构造函数的参数个数和类型都是不一样的,没有办法统一,比较好的办法就是把旧的PAddExpProc的实例传进来,然后新类自己初始化需要的参数.比如PAddExpProc2需要5个参数,这5个参数都可以通过反射从原来的procedure里面拿到:


2.然后开始打包写好的类,可以自己用命令打,也可以用eclipse的输出功能,最后打好的jar包取名为hotdeploy.jar.这个jar的名字是在sys.properties文件中的sys.hotdeploy.j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值