Jdbc连接池 - 使用仅在运行时已知的多个模式

时间:2011-09-01 02:42:17

标签: jdbc connection-pooling database-schema spring-jdbc

我正在研究正在执行以下操作的引擎:

  1. 从数据库获取数据提供者信息(告诉我要连接哪些数据库和架构详细信息以获取我的数据)
  2. 使用该信息连接到数据库并获取我的数据,稍后我用它来构建一些XML内容。
  3. 处理和隔离数据库连接管理的标准设置是创建一个DataSource bean(我使用Spring连接我的组件)并将其注入我的ProviderConfigDao(加载连接配置)和ContentDao(使用连接细节加载数据)以前加载过)。这样可以很好地隔离连接与实际代码的处理,因此DAO类不需要知道如何以及何时创建/打开/关闭连接等。

    不幸的是,这种设置不起作用,因为当我创建连接时,我需要能够指定数据库模式。我从一开始就不知道所有不同的模式,因此我无法创建一组DataSource对象来覆盖所有这些模式,因此必须在运行时创建DataSource对象,并且它的创建对用户是隐藏的。

    我能想到的唯一解决方案是:

    1. 让另一个类/接口(DataSourceProvider)有一个方法:

      //Gets the connection URL as parameter (which includes the schema name).
      DataSource getDataSource(String url);
      
    2. 在Spring配置中添加一个bean,为它提供一个自定义实现,管理每个模式的DataSource对象的创建。
    3. 将该对象注入我的DAO类而不是DataSource对象。
    4. 这不是一个糟糕的解决方案,但我想知道是否在某些开源软件包中可能支持这样的东西...我宁愿使用已经完成的东西并进行测试然后重新发明轮子。

      干杯, 燕姿。

1 个答案:

答案 0 :(得分:0)

有一个JDBC Utils可以从数据库org.springframework.jdbc.support.JdbcUtils获取所有元数据 参数:

  1. 数据源
  2. org.springframework.jdbc.support.DatabaseMetaDataCallback
  3. 的实施