当前位置: 首页 > 知识库问答 >
问题:

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

邓禄
2023-03-14

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

为了优化数据库连接使用,数据库连接池的实现将是非常好的,对吗?

使用Java/Spring:如何为动态数据库创建连接池?我有点惊讶于这里缺少干净的选择

问题:Tomcat的连接池(以及据我所知的C3P0)将每个新的DataSource实例视为一个全新的连接池-

  1. 创建一个具有通用MySql连接的静态数据源(不在连接上指定数据库)并将连接池与此数据源以及适应的SQL语句一起使用,这是一个好主意吗
    堆栈引用
  2. 开发一个自定义的基于持久数据库的数据源池怎么样?有在这里表演的经验吗?有什么建议吗?有这样的图书馆吗
  3. 或者通过操纵Tomcat的上下文动态创建Tomcat JNDI数据源来解决Tomcat的数据源问题是可行的。从Java动态生成xml
  4. 我不敢相信没有比这更简单的解决方案了。Grails/Hibernate与此抗争,Java/JDBC与此抗争。。。通过动态创建特定于用户的数据库,在用户基础上分离用户数据,这种情况是否罕见?如果是这样的话,什么是更好的设置

编辑

共有3个答案

习旻
2023-03-14

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

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

>

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

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

    使用spring的多上下文特性:其思想是为您建立的每个连接分配一个代码,然后像spring的应用程序上下文一样加载该连接,然后在locator类中,将该上下文放入映射中,并根据需要频繁使用它。

    我认为如果您遵循这些步骤,您可以根据需要创建动态池或数据库连接。

  • 李奕
    2023-03-14

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

    我有一张游泳池的地图:

    • have a
       Map < connectionUrlString,List< c3poPool > > map

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

    阚夕
    2023-03-14

    我相信HikariCP不需要指定单个数据库就可以工作。

     类似资料:
    • 问题内容: 我正在Laravel 5(.1)中创建一个应用程序,在该应用程序中需要连接到不同的数据库。唯一的问题是,它不知道必须连接到哪个数据库,因此无法在config中使用database.php。控制器负责使用动态给定的连接详细信息进行连接。 如何建立与数据库的新连接,包括使用DB类?(或者这可能) 提前致谢! 问题答案: 最简单的解决方案是在运行时设置数据库配置。Laravel可能希望从文件

    • 连接数据库 在能够对MongDB进行操作之前,需要使用BuguFramework创建一个数据库连接,代码如下: BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.connect("192.168.0.100", 27017, "mydb", "username", "password"); 也可以

    • 一、全局配置定义 return array( 'DB_TYPE' => 'mysql', 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'thinkcmf', 'DB_USER' => 'root', 'DB_PWD' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' =>

    • ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。数据库抽象访问层基于PDO方式,目前内置包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。 如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。 配置文件

    • 问题内容: 我正在尝试创建一个多租户应用程序(saas),其中每个客户端都有自己的数据库。 我的情况是: 我创建了一个中间件,该中间件将确定谁是基于子域的客户端,然后从常规数据库中检索客户端的数据库连接信息。我不知道如何为此客户端建立连接对象,以便能够在我的控制器中使用。我应该在中间件还是控制器中执行此操作?如果它在模型中,我该如何传递连接字符串和参数(我可以使用会话,但我不知道如何从模型内部访问

    • 本文向大家介绍java连接mysql数据库 java连接sql server数据库,包括了java连接mysql数据库 java连接sql server数据库的使用技巧和注意事项,需要的朋友参考一下 在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库 以及java连接sql server数据库 一、mysql 二、sql server 以上就