如何从 运行 Web 应用程序连接到第二个、第三个、第四个等数据库?
How to connect to second, third, fourth, etc. database from a running web application?
我还没有代码,因为这是一个基于概念的问题,而不是实际的实施问题,所以我出价了你的许可。
我正在开发一个基于 Spring 的 Web 应用程序,它有自己的数据库用于访问、配置和工作。但是这个应用程序必须连接到其他数据库并执行 SQL select 查询。虽然应用程序(我们称之为主机)自己的数据库是 MySQL,但它应该能够连接到 MySQL 和 MS_SQL 数据库(我们称之为访客)。
主机应该能够实例化与来宾的连接,检索 SQL 结果集并关闭连接。
这里的问题是应该怎么做?使用 c3p0
?一些连接工厂?我以前从未遇到过这样的问题,希望得到一些帮助。
应用程序与 "its" 数据库之间没有特殊关系。对于您想访问的数据库数量,您有相同的基本选项。
有一种老式的方法,使用 DriverManager, and there is the newer way, of instantiating a DataSource 的静态方法,可以从中获取连接。使用 DataSource
的一个优点是它可以为您汇集 Connections
,从而为您提高性能(以一些额外的线程和内存开销为代价)。
您的应用程序很可能会频繁访问您的 "main" 数据库。除非您的 DBMS 或应用程序服务器提供自己的具有透明连接池的 DataSource 实现,否则您几乎肯定会希望通过为您提供此功能的库访问此数据库,例如 c3p0 or HikariCP.
对于其他数据库,如果您不经常访问它们并且您对它们的使用对性能不是特别敏感,您可以考虑只使用 DriverManager.getConnection(...)
或 [=10 的简单、非池化实现=] 就像 c3p0 的 DriverManagerDataSource。如果您要经常使用其他数据库,那么您将希望通过池支持的数据源访问它们。
(您可能想要选择一个池化库并坚持使用它来访问您的所有数据库。没有什么能阻止您使用 dbcp
池化访问一个 DBMS,使用 HikariCP
池化访问另一个 DBMS,另一个 c3p0
等,但你会增加无用的复杂性。)
您必须考虑的主要事情是速度和 memory/thread 开销之间的权衡。对于很少访问的数据库,通常最好不要使用连接池。对于经常访问的数据库,如果速度很重要,您几乎肯定会想要使用池库。
无论如何,您始终可以通过 DriverManager
或 DataSource
从您的应用程序访问任意数量的数据库。 JDBC 是一个优雅、统一的 DBMS 接口。您面临的(小)复杂性是决定使用 DataSource
的哪些实现。
我还没有代码,因为这是一个基于概念的问题,而不是实际的实施问题,所以我出价了你的许可。
我正在开发一个基于 Spring 的 Web 应用程序,它有自己的数据库用于访问、配置和工作。但是这个应用程序必须连接到其他数据库并执行 SQL select 查询。虽然应用程序(我们称之为主机)自己的数据库是 MySQL,但它应该能够连接到 MySQL 和 MS_SQL 数据库(我们称之为访客)。
主机应该能够实例化与来宾的连接,检索 SQL 结果集并关闭连接。
这里的问题是应该怎么做?使用 c3p0
?一些连接工厂?我以前从未遇到过这样的问题,希望得到一些帮助。
应用程序与 "its" 数据库之间没有特殊关系。对于您想访问的数据库数量,您有相同的基本选项。
有一种老式的方法,使用 DriverManager, and there is the newer way, of instantiating a DataSource 的静态方法,可以从中获取连接。使用 DataSource
的一个优点是它可以为您汇集 Connections
,从而为您提高性能(以一些额外的线程和内存开销为代价)。
您的应用程序很可能会频繁访问您的 "main" 数据库。除非您的 DBMS 或应用程序服务器提供自己的具有透明连接池的 DataSource 实现,否则您几乎肯定会希望通过为您提供此功能的库访问此数据库,例如 c3p0 or HikariCP.
对于其他数据库,如果您不经常访问它们并且您对它们的使用对性能不是特别敏感,您可以考虑只使用 DriverManager.getConnection(...)
或 [=10 的简单、非池化实现=] 就像 c3p0 的 DriverManagerDataSource。如果您要经常使用其他数据库,那么您将希望通过池支持的数据源访问它们。
(您可能想要选择一个池化库并坚持使用它来访问您的所有数据库。没有什么能阻止您使用 dbcp
池化访问一个 DBMS,使用 HikariCP
池化访问另一个 DBMS,另一个 c3p0
等,但你会增加无用的复杂性。)
您必须考虑的主要事情是速度和 memory/thread 开销之间的权衡。对于很少访问的数据库,通常最好不要使用连接池。对于经常访问的数据库,如果速度很重要,您几乎肯定会想要使用池库。
无论如何,您始终可以通过 DriverManager
或 DataSource
从您的应用程序访问任意数量的数据库。 JDBC 是一个优雅、统一的 DBMS 接口。您面临的(小)复杂性是决定使用 DataSource
的哪些实现。