Java 什么';这是基于Tomcat JNDI和基于Spring/Hibernate DS的连接池之间的区别

Java 什么';这是基于Tomcat JNDI和基于Spring/Hibernate DS的连接池之间的区别,java,tomcat,jdbc,connection-pooling,Java,Tomcat,Jdbc,Connection Pooling,我一直在研究连接池选项,但与相同的Spring/Hibernate解决方案相比,Tomcat JNDI连接池方法的区别有点不清楚 虽然使用这两种方法都可以实现池化,但是考虑到我们的限制,我们使用Tomcat的特定应用程序将更好地支持我们 读到这篇文章,我有一些建议要提 每种方法之间是否有值得一提的显著差异?其他人对其中一种(或两者)的个人体验是什么?我已经成功地使用Spring/Hibernate多年了。这两种方法是互补的,而不是相互排斥的。在生产系统中,Spring/Hibernate等将以j

我一直在研究连接池选项,但与相同的Spring/Hibernate解决方案相比,Tomcat JNDI连接池方法的区别有点不清楚

虽然使用这两种方法都可以实现池化,但是考虑到我们的限制,我们使用Tomcat的特定应用程序将更好地支持我们

读到这篇文章,我有一些建议要提


每种方法之间是否有值得一提的显著差异?其他人对其中一种(或两者)的个人体验是什么?我已经成功地使用Spring/Hibernate多年了。

这两种方法是互补的,而不是相互排斥的。在生产系统中,Spring/Hibernate等将以
javax.sql.DataSource
的形式从appserver获取对连接池的引用,通常是通过在JNDI树上查找它。通常认为管理连接池及其连接是appserver的“任务”

记住,JNDI只是一个注册共享对象的地方,它本身并不要求任何给定的连接池机制。应用服务器创建和配置池,应用程序(通过Spring/Hibernate/任何方式)使用它


但是,应用程序自己配置和管理连接池也是有效的。这确实意味着应用程序需要做更多的工作,而对appserver的依赖更少。

我可能错了,但我认为,如果使用JNDI连接池,它将是容器范围的(例如,在多个web应用程序之间共享)。如果您在Spring上下文中定义连接池,它将留在您的上下文中(例如,它将是应用程序范围的)。我没有使用Tomcat+JNDI选项,所以我不能给出很好的建议。这很公平,很有意义。现在假设我使用基于Tomcat JNDI的池,我假设因此我需要关闭Spring中的池配置,以便不在Tomcat的JNDI池之上进行池?Spring没有连接池实现,它使用您给它的任何
DataSource
对象-如果这恰好是Tomcat通过JNDI提供的连接池,那就更好了。是的,对不起,我是说HibernateOh对了。是的,Hibernate的连接池严格用于开发,它不适用于生产系统-它在手册中这么说: