java - 为什么我们使用 DataSource 而不是 DriverManager?

标签 java jdbc datasource

我正在阅读 Java JDBC 规范 (vr. 4),我遇到了这样的声明:

DataSource — this interface was introduced in the JDBC 2.0 Optional Package API. It is preferred over DriverManager because it allows details about the underlying data source to be transparent to the application

我想了解的是 ConnectionDataSource 之间的区别,以及它存在的原因。我的意思是,上面的 block 说有关数据源的详细信息对应用程序是透明的,但不会在属性文件中外部化数据库属性(例如用户名、密码、url 等)然后使用 DriverManager 以相同的方式工作?

创建 DataSource 接口(interface)是否只是为了有一种通用的方式来返回可以池化的连接等?在 Java EE 中,应用服务器是否实现了此接口(interface),并且部署的应用程序是否具有对数据源而不是连接的引用?

最佳答案

更好的可扩展性和维护

对于DriverManager,您需要了解所有详细信息(主机、端口、用户名、密码、驱动程序类)才能连接到数据库并获得连接。将它们外部化到属性文件中并不会改变您需要了解它们这一事实。

使用 DataSource 您只需要知道 JNDI 名称。 AppServer 关心细节,不是由客户端应用程序的供应商配置,而是由托管应用程序的管理员配置。

可扩展性:

假设您需要自己创建连接,您将如何处理不断变化的负载,有时您有 10 个用户有时您有 1000 个用户,您不能只在需要一个连接时获得连接,然后“释放”它以便数据库服务器不会脱离连接,这会导致您进入连接池。 DriverManager 不提供,DataSource 提供。

如果您要自己编写连接池,则必须使用 DriverManager,否则请使用 DataSource

关于java - 为什么我们使用 DataSource 而不是 DriverManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15198319/

相关文章:

java调试库

java - 为什么 Pattern.compile 在 android studio 和 Java SE 中的行为不同?

mysql - 配置 GlassFish JDBC 连接池以处理 Amazon RDS 多可用区故障转移

datasource - 具有 Athena 自定义查询的 Tableau 数据源

java - 读取缓冲区中的csv,检查是否通过检查 -> 将信息逐行转发到方法

java - Spring Scheduled 注解中的固定速率和固定延迟有什么区别?

postgresql - Clojure jdbc postgres : Why do the results from my query return unicode characters in table names as �?

java - JMeter 无法使用 JDBC 连接连接到 Phoenix

java - 在 Java 中从 DataSource 获取 Connection 对象

grails - 在Groovy Controller /服务中使用非默认dataSource