Java Tomcat-运行外部JAR/WAR

Java Tomcat-运行外部JAR/WAR,java,tomcat,executable-jar,Java,Tomcat,Executable Jar,因此,我有一个运行的Tomcat web应用程序,其结构如下: 主Servlet A班 B班 C班 用于各种作业执行的大量类 webapp是通过ant编译和部署的。目前,我得到了一个很好的项目。与所有类的战争 基本上,主servlet充当调度器。根据收到的webrequest,它会在新线程中启动作业A、B或C 我想改进我的应用程序,以便在不影响运行进程的情况下重新部署作业A/B/C的类。以下是我对它的概念化: 我部署了主servlet,用作调度器 我部署了A.war,B.war,C.war

因此,我有一个运行的Tomcat web应用程序,其结构如下:

  • 主Servlet
  • A班
  • B班
  • C班
  • 用于各种作业执行的大量类
webapp是通过ant编译和部署的。目前,我得到了一个很好的项目。与所有类的战争

基本上,主servlet充当调度器。根据收到的webrequest,它会在新线程中启动作业A、B或C

我想改进我的应用程序,以便在不影响运行进程的情况下重新部署作业A/B/C的类。以下是我对它的概念化:

  • 我部署了主servlet,用作调度器
  • 我部署了A.war,B.war,C.war
  • 我经营B.war
  • 我重新部署了A.war,B.war仍在运行
  • 我发动了一场战争
  • B.war完成后,其输出通过主servlet发送回
老实说,我不知道从哪里开始,也不知道从哪里看。我曾考虑过使用ProcessBuilder并在命令行中执行jar/war,但感觉这是最不安全的事情

欢迎您的任何意见


谢谢大家!

我相信您需要一个模块化的应用程序,其中您有多个插件(在您的案例中是作业),可以在需要时加载或卸载,并且一旦可用就可以使用。检查stackoverflow问题,它可以给你一点帮助


但为了简单起见,在之前的一项工作中,我们需要一些类似于OSGI的东西,而不使用OSGI,我们使用构建API并为我们的模块创建了一个接口(在您的工作中),每个jar都有一个类来实现该接口。一旦工作需要,你可以从服务加载器中调用它,如果它存在,你可以使用它,如果不抛出一些错误。

我相信微服务是你的答案。您的应用程序应该通过web服务(REST)进行通信,最好将每个应用程序部署在一个单独的docker容器中。这是我不知道的,我来看看这个谢谢。如果你有任何例子或指南,我会从那里开始反思!如果您在servlet容器中运行时正在生成自己的线程,那么几乎肯定是“做错了”。该应用程序是否主要通过HTTP进行通信并提供这些服务(例如作业A、作业B和作业C)?如果是这样,那么容器将取代“主servlet”已经在做的所有事情,并且代码可以变得更简单。