问题设置基于Web服务(Spring / Java,Tomcat7和MySql),每个用户都有自己的数据库,因此每个请求都需要自己的连接。由于所有数据库都是在运行时动态创建的,因此在启动之前静态配置它们不是一种选择。
为了优化数据库连接使用,数据库连接池的实现会很棒,对吗?
使用Java / Spring:如何为动态数据库创建连接池?我对这里缺乏干净选项感到震惊!
问题:Tomcat's Connection Pool(据我所知C3P0)将每个新的DataSource实例视为一个完整的新连接池 - > stack-reference
修改
答案 0 :(得分:2)
我相信HikariCP无需指定单个数据库即可运行。
答案 1 :(得分:1)
在运行时创建数据库后,您还必须在运行时创建池。我担心弹簧基础设施在这里没有给你任何帮助,因为它是针对通常的静态用例而调整的。
我有一张泳池地图:
Map < connectionUrlString,List< c3poPool > > map
这是一种低级解决方案。如果您想更进一步,可以将此逻辑包装到数据库连接提供程序中,并将其注册为“驱动程序”。这样,您的应用程序的任何部分都会请求新连接,您只需从现有池返回一个连接(如果请求一个全新的连接,则为此创建一个新池)。
答案 2 :(得分:0)
首先,对不起我的英语,我每天都在进步。
根据我的经验,我遇到了类似的情况,并且使用spring框架解决了这个问题。让我解释一下你是如何解决这个问题的。
制作具有以下特征的弹簧配置文件: a)资源加载器:这一个负责从配置文件或从数据库加载属性,这些属性将适合建立数据库连接。 b)使用您要加载的属性参数化的池数据库配置。
创建一个定位器类:在这个类中你需要一个HashMap
使用spring的多上下文功能:这个想法是为你建立的每个连接分配一个代码,然后像Spring的应用程序上下文那样加载该连接,然后在locator类中,放入地图中上下文并根据需要频繁使用。
我认为您按照这些步骤操作,可以根据需要创建动态池或数据库连接。