我应该同步DataSource的getConnection()

Vit*_*nko 1 java sql connection-pooling jdbc

我有连接池的singelton.

public enum ConnectionPool {
    INSTANCE;

    private DataSource ds = null;

    ConnectionPool() {
      try {
         final Context initCtx = new InitialContext();
         ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/test");
      } catch (NamingException e) {
         e.printStackTrace();
      }
    }

   public Connection getConnection() throws SQLException {
      return ds.getConnection();
   }
}
Run Code Online (Sandbox Code Playgroud)

我应该同步getConnection()以防止从不同的线程获取相同的实例吗?它看起来已经被Tomcat同步了,但我不确定(我使用的是Tomcat 8).

Ada*_*ker 7

虽然在java docs中没有明确提到它,但是DataSource#getConnection方法被设计为在单个DataSource实例上同时调用.

在一般情况下,您不需要提供客户端级别的同步.

可能省略了java docs中的限制,以提供实现的灵活性.