我有一个现有的Java应用程序(基于Spring),它目前没有Web界面,也没有在Web容器中运行。它很好地与启动程序打包并且正常工作。
我需要做的是为一些管理类型的东西添加一个管理Web界面,检索实时指标,也许还有一些图表,让用户感到温暖的模糊感,知道一切正常。由于我们是一家Spring商店,而且我们的一些Web应用程序已经使用了Spring MVC,这对我们来说才有意义,但是,我对我们内部的Spring人员对我应该如何处理的建议感到不满。 / p>
这个网络界面的理想方式是什么?
有关清洁分离的任何想法吗?
另外值得注意的是,我当前的jar包含一些shell脚本启动的实用程序应用程序。走纯粹的WAR路线会让这变得不那么容易,因为我不能在我的war文件中点java并选择要执行的类。
感谢。
答案 0 :(得分:2)
如果web只是一个小小的添加应用程序,将其迁移到WAR并在servlet容器中部署可能是一种过度杀伤力。嵌入Web服务器/ servlet容器看起来要简单得多,尽管它不一定是Jetty或Tomcat。您可以使用内置于JDK中的Web服务器,也可以在netty或甚至原始套接字上编写一个。但这是一个难以维持的地方。
另一种解决方案是在阅读时向我的母亲说明:
某些管理类型的Web界面,检索实时指标,可能还有一些图表
也许您不需要界面,而是监控基础设施?查看JMX(Spring有great support for JMX) - 并编写第二个Web应用程序,它只需通过JMX连接到您的独立Java应用程序,并以奇特的方式显示指标。另一种方法是通过Jolokia公开JMX,它将JMX转换为REST服务。
这种方法有几个优点:
答案 1 :(得分:0)
这实际上取决于您现有的Java / Spring应用程序的结构以及它提供的API的大小。我已经做了类似的事情,我通过创建一个单独的Spring MVC项目来接近它,然后将现有的Java应用程序指定为JAR依赖项。
使用Maven(或Ivy等)很容易,并且提供了很好的解耦。诀窍是能够在Spring MVC应用程序中编写服务类,然后通过简单的DAO类通过您的依赖Spring应用程序访问数据。这就是为什么我在开始时说,它取决于原始Java应用程序的结构。它必须能够提供用于数据访问的API,然后您可以将DAO(impl)插入其中。
如果这不容易,那么我建议的下一个选项就是将Spring应用程序转换为Spring MVC应用程序。我已经在另一个应用程序上工作了。使用Maven,可以指定构建可以创建war文件或jar文件(或两者)。因此它可以部署为webapp(通过war)或普通app(通过jar)。是的,jar版本有点膨胀,但它是值得妥协的。
通过war文件嵌入Jetty或使用Tomcat的问题是一个完全独立的问题,有其优点和缺点。它不应该影响您在构建Web应用程序时采用的方法。