我使用j2ee和java构建了一个Web应用程序,用户可以上传jar或删除现有的jar并上传新的jar。由于服务器正在运行且罐子被它锁定,当用户选择删除jar时我无法删除它。有没有办法实现这个目标?当我用Google搜索时,我获得了有关热部署或使用类加载器卸载jar然后删除它的信息。这样做的好方法是什么?任何帮助或建议都将非常感激。
答案 0 :(得分:3)
如果Web服务器正在使用该文件,则文件系统不会让您删除该文件,因为它已被Web服务器锁定。你有两个选择。
你可以热部署一个jar的新副本,例如,如果它是一场战争,说你有(为了争论假设tomcat)......
ROOT.war
,您可以复制到webapps目录ROOT#001.war
,所有流量都将移至此位置。这场新战争可能包含你的新罐子。
我个人只是谨慎地这样做,因为我相信网络服务器在重新启动时可以更好地释放资源。除此之外,如果你想安全地部署罐子,你唯一真正的选择是停止Web服务器,应用jar,再次启动。如果您希望没有停机时间,您可以考虑对环境进行集群,但这实际上取决于您对业务的关键程度。