Tomcat基于JNDI和Spring/Hibernate数据源的连接池有什么区别?

4
我一直在研究连接池选项,但对于Tomcat JNDI连接池方法和Spring/Hibernate解决方案的区别还不太清楚。
虽然使用12都可以实现池化,但我们的特定应用程序更适合使用Tomcat,考虑到我们的限制条件。
阅读相关资料,有人建议坚持使用Spring/Hibernate
每种方法之间是否有值得一提的显著差异?其他人对其中一种或两种方法的个人经验是什么(或者两种都有)- 我已经成功地使用Spring/Hibernate多年了。

我可能错了,但我认为如果您使用JNDI连接池,它将是容器范围内的(例如,在几个Web应用程序之间共享)。如果您在Spring上下文中定义连接池,则它将留在您的上下文中(例如,它将是应用程序范围内的)。我没有使用Tomcat + JNDI选项,因此无法给出真正好的建议。 - dma_k
1个回答

3
这两种方法是互补的,而非相互排斥的。在生产系统中,Spring/Hibernate等框架会获取一个连接池的引用,形式上是javax.sql.DataSource,通常通过在JNDI树中查找来自应用服务器的引用。一般认为应用服务器有责任管理连接池及其连接。

请记住,JNDI只是用于注册共享对象的地方,并不强制使用任何特定的连接池机制。应用服务器创建并配置连接池,应用程序(通过Spring/Hibernate或其他方式)使用它。

然而,对于应用程序自己配置和管理连接池同样有效。这意味着需要应用程序做更多的工作,但减少了对应用服务器的依赖性。


很好,那很有道理。现在假设我选择了基于Tomcat JNDI的连接池,因此我需要关闭Spring中的连接池配置,以避免在Tomcat的JNDI连接池之上进行连接池操作,是这样吗? - j pimmel
1
Spring没有连接池实现,它使用您提供的任何DataSource对象 - 如果恰好是通过JNDI由Tomcat提供的连接池,那就更好了。 - skaffman
真的,抱歉我是指Hibernate。 - j pimmel
1
没错。是的,Hibernate的连接池严格用于开发,不适用于生产系统 - 在手册中有明确说明:http://docs.jboss.org/hibernate/stable/core/reference/en/html/session-configuration.html#configuration-hibernatejdbc - skaffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接