场景介绍
使用过was的时候,我们常见的建立数据源时有一个验证数据库信息的正确性的按钮。但是如果没有相应的驱动包的时候,校验是失败的,如果想校验成功,那就加入对应的数据库驱动包即可,但是was本身并不是热部署的,要想验证那就必须重启was。这个在服务器还是可以接受的,因为你建立数据源肯定是是先有规划的,驱动包都是放入指定地点的,weblogic11g was本身还提供了很多数据库的Jar包以备使用。但是换成一个配置系统的话,那这样的操作就不能忍受了。因为要验证一下数据库连接是否正确还要去重启远程的机器,这听起来就比较麻烦。
解决方案
java的热部署方案可以解决这个问题。java利用classloader的双亲委托机制可以解决这个问题。思路就是用新的classloader去加载类,然后去做校验,打破双亲委托。类加载的目录就是我们指定的目录,每次可以上传jar包到固定目录。然后用新的classloader去加载。
代码实现
首先要写一个破坏双亲委托的classloader。
当有新的jar包上传的时候,就需要重新加载类,这里的类是可以配置的。然后根据配置读取加载的类。
为了发现文件上传就可以出发这个操作,所以此时需要使用java7的新特性---目录监控。
为了完成功能代码简洁,这里使用了回调。增加一个接口。
接下来就是调用的主体。
开启目录监控,然后直接使用回调去加载mysql的驱动类。这里已经获取到驱动类了,再通过这个驱动类就能直接获取链接。
总结
classloader让Java的操作更加灵活,很多需要重启应用的问题,都可以考虑加入classloader来做到热更新。
领取专属 10元无门槛券
私享最新 技术干货