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

N.R*_*.R. 12 java mysql tomcat connection-pooling jdbc

问题设置基于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.
    如何使用上面的连接池执行?

小智 0

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

根据我的经验,我也遇到过类似的情况,用spring框架解决了。让我向您解释一下如何解决这个问题。

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

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

  3. 使用 spring 的多上下文功能:这个想法是为您建立的每个连接分配一个代码,然后像 spring 的应用程序上下文一样加载该连接,然后在定位器类中,放入该上下文的映射并频繁使用它根据您的需要。

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