Jdbc 连接池 - 使用仅在运行时已知的多个模式
我正在开发一个执行以下操作的引擎:
- 从数据库获取数据提供程序信息(告诉我要连接哪些数据库和架构详细信息以获取我的数据)
- 使用该信息连接到数据库并获取我的数据,后来我用它来构建一些 XML 内容。
处理和隔离数据库连接管理的标准设置是创建一个 DataSource bean(我使用 Spring 来连接我的组件)并将其注入我的 ProviderConfigDao (加载连接配置)和 ContentDao (使用之前加载的连接详细信息加载数据) 。这可以很好地将连接的处理与实际代码隔离开来,因此 DAO 类不需要知道如何以及何时创建/打开/关闭连接等。
不幸的是,这个设置不起作用,因为当我创建连接时,我需要能够指定数据库架构。我从一开始就不知道所有不同的模式,所以我无法创建一组 DataSource 对象来覆盖所有这些模式,因此 DataSource 对象必须在运行时创建,并且它的创建对用户隐藏。
我能想到的唯一解决方案是:
让另一个类/接口(DataSourceProvider)具有一种方法:
//获取连接 URL 作为参数(其中包括架构名称)。 数据源 getDataSource(String url);
- 在 Spring 配置中添加一个 bean,为其提供自定义实现,用于管理每个模式的 DataSource 对象的创建。
- 将该对象而不是 DataSource 对象注入到我的 DAO 类中。
这不是一个糟糕的解决方案,但我想知道某些开源包中是否已经支持类似的东西......我宁愿使用已经完成并测试过的东西,然后重新发明轮子。
干杯, 斯特夫。
I am working on an engine that is doing the following:
- gets data provider info from DB (that tells me to what database & schema details to connect to get my data)
- use that info to connect to the database and get my data, that later I use to build some XML content.
The standard setup to handle and isolate database connection management would be to create a DataSource bean (I'm using Spring to wire my components) and inject that in my ProviderConfigDao (loads connection config) and ContentDao (loads data using connection details loaded previously). This would nicely isolate the handling of the connections from the actual code, thus the DAO classes not needing to know how and when a connection is created/opened/closed etc.
This setup doesn't work unfortunately, as when I create my connection, I need to be able to specify the database schema. I don't know all the different schemas from the beginning, so I can't create a set of DataSource objects to cover all of them, thus the DataSource object must be created at runtime and it's creation hidden from the users.
The only solution I can think of is:
Have another class/interface (DataSourceProvider) having one method:
//Gets the connection URL as parameter (which includes the schema name). DataSource getDataSource(String url);
- Add a bean in Spring config to provide a custom implementation for it that manages creation of DataSource objects for each schema.
- Inject that object to my DAO classes instead of the DataSource object.
It's not a bad solution, but I was wondering if there is maybe support for something like this already in some open source package ... I'd rather use something already done and tested then reinvent the wheel.
Cheers,
Stef.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有一个 JDBC Utils 可以从数据库获取所有元数据
org.springframework.jdbc.support.JdbcUtils
参数:
org.springframework.jdbc.support.DatabaseMetaDataCallback
的there's a JDBC Utils to get all the metada from a database
org.springframework.jdbc.support.JdbcUtils
parameters:
org.springframework.jdbc.support.DatabaseMetaDataCallback