我正在寻找将 Spring 部署在 Tomcat 上的优势,而不是将其置于任何应用程序服务器容器之外。
我的项目不需要任何网络支持。它确实需要事务管理、数据库池、JMX、低延迟和更常见的 java-ee 技术等技术。
那么我为什么还要使用tomcat呢?如果只是因为有 DB POOL 的原因,我可以自己实现。我正在寻找低延迟解决方案。
同样,我的项目是一个完全后端,不需要任何网络支持。
那么我在这里想念什么?
我正在寻找将 Spring 部署在 Tomcat 上的优势,而不是将其置于任何应用程序服务器容器之外。
我的项目不需要任何网络支持。它确实需要事务管理、数据库池、JMX、低延迟和更常见的 java-ee 技术等技术。
那么我为什么还要使用tomcat呢?如果只是因为有 DB POOL 的原因,我可以自己实现。我正在寻找低延迟解决方案。
同样,我的项目是一个完全后端,不需要任何网络支持。
那么我在这里想念什么?
您所说的“更常见的 Java EE 技术”究竟是什么意思?
如果它“只是一个后端”,那么前端是什么?应用程序将如何与后端对话?
如果不需要 Web 界面,则使用 Web 容器没有任何优势。
如果您有复杂的事务管理需求,需要消息队列等,可能更容易在应用程序服务器(相对于 Web 容器)下设置,因为存在现有的管理/管理接口。所有这些也可以自己设置,但可能更痛苦——使用 Spring 可能会在一定程度上减轻这种痛苦。
然而,对“更常见的 Java EE 技术”的需求让我对实现独立应用程序有点紧张。应用程序容器具有内置、经过测试和功能的所有“通用 Java EE 技术”。如果您将各种包组合在一起以提供“通用 Java EE 技术”,而无需使用通用 Java EE 应用程序容器,那么仅使用应用程序容器可能会更容易,这也为您提供了对来自各种来源的服务。
如果您的应用程序不是 Web 应用程序,您可以使用此处列出的所有已知实现类 下的任何非 Web 特定应用程序上下文。然后,您可以从可运行 jar 中的 main 方法初始化上下文。
如果您不需要网络支持,则不必使用 tomcat 或任何其他应用程序服务器。Spring 将为您提供您需要的大部分功能。对于连接池,有许多可用的选项,例如 c3p0 和 apache dbcp。您可以使用其中之一。
您唯一需要担心的是彻底关闭您的流程。您可以通过实现自己的关闭挂钩来做到这一点。
部署应用程序的原因之一tomcat
是它将为您提供所有连接负担、线程管理等。没有什么是您自己无法实现的。但请记住,这tomcat
是健壮的,他们已经处理了实现该逻辑的所有麻烦。
除此之外,使用应用程序容器没有什么意义(如果您认为不必开发和维护这么多代码很容易)。
你不应该使用 tomcat 或其他任何东西。Spring 已经是容器了。在一个简单的线程中初始化弹簧,确保它具有适当的清理流量。就这样。我曾经在几个服务器端集成应用程序上工作,这些应用程序通过不同的协议与其他服务器进行分配、通信,并且在没有 Web 容器或 J2ee 应用程序服务器的情况下,一切都很容易完成。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)
}
}