是javax.sql.DataSource线程安全吗?

时间:2013-02-14 10:27:47

标签: java datasource

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

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

3 个答案:

答案 0 :(得分:10)

javax.sql.DataSource本身是一个接口,因此如果它是线程安全的,它是特定于实现的。

对于postgres sql驱动程序,我建议您阅读官方文档中的Chapter 10. Using the Driver in a Multithreaded or a Servlet Environment

  

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

答案 1 :(得分:8)

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

这是像Spring JdbcTemplate这样的习惯用法。

答案 2 :(得分:0)

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

相关问题