繁体   English   中英

用于动态数据库连接的连接池

[英]Connection pool for dynamic database connections

问题设置基于Web服务(Spring / Java,Tomcat7和MySql),其中每个用户都有自己的数据库,因此每个请求都需要自己的连接。 由于所有数据库都是在运行时动态创建的,因此在启动之前静态配置它们不是一种选择。

为了优化数据库连接使用,数据库连接池的实现会很棒,对吧?

使用Java / Spring:如何为动态数据库创建连接池? 我对这里缺乏干净的选择感到震惊!

问题Tomcat的连接池 (据我所知也理解为C3P0 )将每个新的DataSource实例视为一个完整的新连接池 - > stack-reference

  1. 创建具有通用MySql连接的静态数据源(不指定连接时的数据库)并使用带有此数据源的连接池以及适配的SQL语句是一个好主意吗?
    堆叠参考
  2. 如何开发基于自定义持久数据库的数据源池? 有表演经验吗? 有什么建议? 任何图书馆都这样做?
  3. 或者通过动态地从Java动态创建Tomcat JNDI数据源来解决Tomcat的DataSource问题是否可行?
  4. 我无法相信没有更简单/简单的解决方案。 Grails / Hibernate正在努力解决这个问题,Java / JDBC正在努力解决这个问题......是否通过动态创建用户特定数据库来分离用户数据这种罕见的用例? 如果是这样,那么更好的设置是什么?

编辑

  1. 另一种选择是来自@ M.Deinum的建议, 使用单个已配置的数据源并动态热交换以获得正确的连接 - > M.Deinum Blogstack-reference
    如何使用上面的连接池执行?

我相信HikariCP无需指定单个数据库即可运行。

在运行时创建数据库后,您还必须在运行时创建池。 我担心弹簧基础设施在这里没有给你任何帮助,因为它是针对通常的静态用例进行调整的。

我有一张泳池地图:

  • 有一个
      映射<connectionUrlString,List <c3poPool >> map 
  • 请求连接时,从地图中获取相应的c3po池
  • 并且您可以充分利用这两个世界,因为每个动态创建的数据库的真实连接池都由c3po实例处理,但您可以在运行时创建新实例

这是一个低级解决方案。 如果您想更进一步,可以将此逻辑包装到数据库连接提供程序中,并将其注册为“驱动程序”。 这样,应用程序的任何部分都会请求新连接,您只需从现有池返回一个连接(如果请求了一个全新的连接,则为此创建一个新池)。

首先,对不起我的英语,我每天都在进步。

根据我的经验,我有一个类似的情况,它是春天框架的决心。 让我解释一下你是如何解决这个问题的。

  1. 制作具有以下特征的spring配置文件:a)资源加载器:这一个负责从配置文件或数据库加载属性,这些属性将适合建立数据库连接。 b)使用您要加载的属性参数化的池数据库配置。

  2. 创建一个定位器类:在这个类中,你需要一个HashMap

  3. 使用spring的多上下文功能:想法是为您建立的每个连接分配一个代码,然后像使用spring的应用程序上下文一样加载该连接,然后在locator类中,将该上下文放入映射并将其作为频繁使用如你所愿。

我认为您按照这些步骤操作,可以根据需要创建动态池或数据库连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM