13

我在 JBoss 7 中部署的 Java EE 应用程序中使用 PostgreSQL 9.1 JDBC4 驱动程序 (postgresql-9.1-902.jdbc4.jar)。

我可以假设javax.sql.DataSource是线程安全的,以便多个线程可以同时调用它的 getConnection() 方法吗?

4

3 回答 3

11

javax.sql.DataSource本身是一个接口,所以它是特定于实现的,它是否是线程安全的。

对于 postgres sql 驱动,我推荐你阅读官方文档中的第 10 章。在多线程或 Servlet 环境中使用驱动:

PostgreSQL JDBC 驱动程序是线程安全的。[...]

于 2013-02-14T10:50:57.117 回答
10

通常,DataSource您从 Java EE 容器获得的实现将是由连接池支持的线程安全对象,而底层 JDBC 连接的线程安全(或其他)并不真正相关。当您需要与数据库通信时,通常的模式是调用getConnection()数据源以获取连接对象,进行必要的数据库调用,然后close()进行连接。在幕后,这实际上不会关闭底层连接,而只是将其返回到连接池以供将来使用。任何单独的连接一次只能由一个线程使用。

这是 Spring 之类的东西使用的成语JdbcTemplate

于 2013-02-14T11:06:40.833 回答
1

如果它是“连接池实现”,那么它应该是线程安全的。

于 2014-05-04T06:09:02.977 回答