首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

classloader实战:如何不重启校验数据库驱动链接

场景介绍

使用过was的时候,我们常见的建立数据源时有一个验证数据库信息的正确性的按钮。但是如果没有相应的驱动包的时候,校验是失败的,如果想校验成功,那就加入对应的数据库驱动包即可,但是was本身并不是热部署的,要想验证那就必须重启was。这个在服务器还是可以接受的,因为你建立数据源肯定是是先有规划的,驱动包都是放入指定地点的,weblogic11g was本身还提供了很多数据库的Jar包以备使用。但是换成一个配置系统的话,那这样的操作就不能忍受了。因为要验证一下数据库连接是否正确还要去重启远程的机器,这听起来就比较麻烦。

解决方案

java的热部署方案可以解决这个问题。java利用classloader的双亲委托机制可以解决这个问题。思路就是用新的classloader去加载类,然后去做校验,打破双亲委托。类加载的目录就是我们指定的目录,每次可以上传jar包到固定目录。然后用新的classloader去加载。

代码实现

首先要写一个破坏双亲委托的classloader。

当有新的jar包上传的时候,就需要重新加载类,这里的类是可以配置的。然后根据配置读取加载的类。

为了发现文件上传就可以出发这个操作,所以此时需要使用java7的新特性---目录监控。

为了完成功能代码简洁,这里使用了回调。增加一个接口。

接下来就是调用的主体。

开启目录监控,然后直接使用回调去加载mysql的驱动类。这里已经获取到驱动类了,再通过这个驱动类就能直接获取链接。

总结

classloader让Java的操作更加灵活,很多需要重启应用的问题,都可以考虑加入classloader来做到热更新。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G0QJXB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券