如何在Tomcat中创建没有池的数据源

我使用JNDI上下文在Tomcat的context.xml文件中为JDBC驱动程序创建数据源,如下所示,

 

默认情况下,Tomcat将使用DBCP数据源工厂并创建池化数据源。 我们使用的特定数据库和驱动程序已经支持较低级别的池,而额外的池实际上会损害性能。 无论如何使用像这样的JNDI资源创建基本数据源(没有池),这样我可以在最小配置更改的情况下在不同的数据库之间切换?

我知道我可以编写自己的数据源工厂或使用其他驱动程序来实现这一点,但我正在寻找一个更简单的解决方案。

不太确定,如果这可以满足您的需求,但您可以始终使用Spring JDBC支持而不使用Tomcat管理的数据源。

您使用的JDBC驱动程序是否提供了javax.naming.spi.ObjectFactory的实现或您可以使用org.apache.naming.factory.BeanFactory配置的其他一些连接对象? 这些解决方案中的任何一个都不需要您编写自定义代码或添加任何其他第三方库。

如果您确实只想要一个连接,请尝试在DBCP配置中将intialSize设置为1,将maxActive设置为1。

从长远来看,如果您不想使用连接池,则不要使用JNDI来配置数据源,只需在Web应用程序的代码中直接创建它即可。

编辑:

在您的评论中,您说:“它只允许一个连接,服务器立即挂起,因为每个请求都在等待连接。”

是的,如果你通过使池大小为1来有效地关闭池,那就会发生。 但是你的问题的标题是“如何在没有池的情况下创建数据源”,所以我对你究竟想要完成什么感到困惑。

我的建议是不要使用JNDI来定义你的连接(定义JNDI数据源的整个目的是用于跨Web应用程序的连接池)。 相反,在servlet代码中为两种情况定义连接,一种情况继续使用DBCP,另一种情况使用另一种低级连接池。

我为这样的Oracle非池化连接做了这样的事情: