我使用部署在JBoss的Java EE应用程序将PostgreSQL 9.1 JDBC4驱动程序(PostgreSQL相关9.1-902.jdbc4.jar)7是javax.sql.DataSource线程安全吗?
我可以假设为javax.sql.DataSource是线程安全的所以多线程可以同时调用getConnection()方法呢?
我使用部署在JBoss的Java EE应用程序将PostgreSQL 9.1 JDBC4驱动程序(PostgreSQL相关9.1-902.jdbc4.jar)7是javax.sql.DataSource线程安全吗?
我可以假设为javax.sql.DataSource是线程安全的所以多线程可以同时调用getConnection()方法呢?
javax.sql.DataSource本身是一个接口,所以它是一个特定的实现,如果它是线程安全的或不是。
在为Postgres SQL驱动程序,我建议你从官方文档阅读Chapter 10. Using the Driver in a Multithreaded or a Servlet Environment:
PostgreSQL的JDBC驱动程序是线程安全的。 [...]
通常情况下,DataSource
实现您从Java EE容器得到的将是底层的JDBC连接的连接池支持的线程安全的对象,线程安全(或其他方式)不真正相关。当您需要与数据库交谈时,通常的模式是在数据源上调用getConnection()
以获取连接对象,进行必要的数据库调用,然后连接到该连接。在封面下,这不会实际关闭底层连接,而只是将其返回到连接池以供将来使用。任何单独的连接一次只能由一个线程使用。
这是春天使用的成语JdbcTemplate
。
如果它是'连接池实现',那么它应该是线程安全的。