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

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

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

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

对于postgres sql驱动程序,我建议您阅读第10章。从官方文档中使用multithreading或Servlet环境中的驱动程序 :

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

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

这是Spring JdbcTemplate类的习惯JdbcTemplate

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