如何从正在运行的Web应用程序连接到第二,第三,第四等数据库?

时间:2016-02-26 22:02:05

标签: database spring c3p0

我还没有代码,因为这是一个基于概念的问题,而不是实际的实施问题,所以我会出价。

我正在开发基于Spring的Web应用程序,它有自己的数据库,用于访问,配置和工作。但是,此应用程序必须连接到其他数据库并执行SQL选择查询。虽然应用程序(让它称之为主机)自己的数据库是MySQL,但它应该能够连接到MySQL和MS_SQL数据库(让他们称之为访客)。

主机应该能够实例化与guest虚拟机的连接,检索SQL结果集并关闭连接。

这里的问题是如何做到这一点?使用c3p0?有些连接工厂?我以前从未遇到过这样的问题,希望得到一些帮助。

1 个答案:

答案 0 :(得分:0)

应用程序与“其”数据库之间没有特殊关系。对于您想要访问的数据库,您可以使用相同的基本选项。

使用DriverManager的静态方法有一种老式的方法,并且有一种更新的方法,即实例化可以从中获取Connections的DataSource。使用DataSource的一个优点是它可以为您提供Connections池,从而提高性能(以一些额外的线程和内存开销为代价)。

您的应用程序很可能经常访问“主”数据库。除非您的DBMS或应用程序服务器提供自己的具有透明连接池的DataSource实现,否则您几乎肯定会希望通过为您提供此功能的库来访问此数据库,例如c3p0HikariCP

对于其他数据库,如果您不经常访问它们,并且如果您对它们的使用不是特别敏感,那么您可以考虑使用DriverManager.getConnection(...)DataSource的简单,非池化实现比如c3p0的DriverManagerDataSource。如果您要经常使用其他数据库,则需要通过池支持的DataSource访问它们。

(您可能希望选择一个池库并坚持使用它来访问所有数据库。没有什么可以阻止您使用dbcp,另一个使用HikariCP,另一个使用c3p0来访问一个DBMS。 DriverManager等等,但你会增加无用的复杂性。)

您需要考虑的主要问题是速度和内存/线程开销之间的权衡。对于很少访问的数据库,通常最好不要打扰连接池。对于经常访问的数据库,如果速度很重要,您几乎肯定会想要使用池库。

无论如何,您始终可以通过DataSourceDataSource从应用中访问任意数量的数据库。 JDBC是DBMS的优雅,统一的接口。您面临的(小)复杂性决定了{{1}}使用哪种实现。