我正在寻找在Tomcat上部署Spring而不是将其放在任何应用程序服务器容器旁边的优势。
我的项目不需要任何网络支持。 它确实需要诸如事务管理,数据库池,JMX,低延迟和更常见的java-ee技术等技术。
那么为什么我会使用tomcat呢?如果只是因为有了PO POOL的原因,我可以自己实现它。我正在寻找低延迟解决方案。
同样,我的项目是一个完整的后端,不需要任何网络支持。
那我在这里想念什么?
答案 0 :(得分:2)
“更常见的Java EE技术”实际上是什么意思?
如果它只是“后端”,那么前端结尾是什么?应用程序将如何与后端通信?
如果不需要Web界面,使用Web容器没有任何优势。
如果您有复杂的事务管理需求,需要消息队列等,这可能更容易在应用程序服务器(而不是Web容器)下设置,因为存在管理/管理接口。所有这些也可以单独设置,但可能更痛苦 - 使用Spring可以稍微减轻这种痛苦。
然而,对“更常见的Java EE技术”的需求让我对实现独立应用程序感到有些紧张。 App容器具有内置,测试和功能的所有“通用Java EE技术”。如果您将各种软件包联系在一起为您提供“通用Java EE技术”,而不使用通用的Java EE应用程序容器,则可能更容易使用应用程序容器,这也为您提供了规范化访问权限的好处。来自各种渠道的服务。答案 1 :(得分:1)
如果您的应用不是网络应用,则可以使用所有已知实施类 here下列出的任何非网络特定应用上下文。然后,您可以从可运行jar中的main方法初始化上下文。
答案 2 :(得分:1)
如果您不需要Web支持,则不必使用tomcat或任何其他应用服务器。 Spring将为您提供所需的大部分功能。对于连接池,有许多选项可用,例如c3p0& apache dbcp。你可以使用其中一个。
您唯一需要担心的是干净关闭您的流程。你可以通过实现自己的关闭钩子来实现。
答案 3 :(得分:0)
在tomcat
中部署应用程序的一个原因是它将为您提供所有连接负担,线程管理等。没有什么是你自己无法实现的。但要记住tomcat
是健壮的,他们已经处理了逻辑实现的所有麻烦。
除此之外,使用应用程序容器几乎没有意义(如果您认为不必开发和维护这么多代码就很容易了。)
答案 4 :(得分:0)
你不应该使用tomcat或其他任何东西。 Spring已经是容器了。初始弹簧在一个简单的螺纹中,确保它有适当的清理流程。就这样。我曾经在几个服务器端集成应用程序上工作,这些应用程序分配,通过不同协议与其他服务器进行通信,所有内容都可以通过Web Containers或J2ee Application Server轻松完成。 Spring几乎支持所有内容,有时使用3d派对库(缓存,事务,池等等)。简化版可能如下:
...
pubcic static void main (String args[]){
Server.server = new Server(...);
server.initSpringContext()
server.keepAlive();
server.cleanupResources();
}
..
abstract class Server{
abstract void initSpring();
abstract void cleanUpResources();
abstract void shutdown(){
this.state = STOP;
};
public void keepAlive()
while(state!=STOP){
sleep(1000)
}
}