2017-10-10 13 views
0

接続プールを実装していますか? 私はPostgreSQL JDBCドライバはスレッドセーフであると信じていますが、私はMYSQLについてはわかりません。Mysqldatasourceスレッドセーフです

このようなDB接続を処理する静的オブジェクトを作成しています。 package com.amzi.DataAccess;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; 

public class DBUtil { 
    private static MysqlDataSource dataSource = null; 

    public static MysqlDataSource getDataSource() { 
     if (dataSource == null) { 
      dataSource = new MysqlDataSource(); 
      dataSource.setUser("root"); 
      dataSource.setPassword(""); // Put your password here 
      dataSource.setUrl("jdbc:mysql://localhost:3306/user_device_table"); 
     } 
     return dataSource; 
    } 
} 

また別のクラスでは、レコードが存在するかどうかを確認するための接続を作成します。 接続が完了したら、私はそれを閉じます。

public boolean ValidateLogin(User user) { 
    boolean status = false; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    Connection connection = null; 

    try { 
     connection = DBUtil.getDataSource().getConnection(); 
     ps = connection.prepareStatement("select * from users where user_name=? and password=?"); 
     ps.setString(1, user.getUsername()); 
     ps.setString(2, user.getPassword()); 
     rs = ps.executeQuery(); 
     status = rs.next(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     try { 
      connection.close(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    return status; 
} 
+0

ほとんどの場合(古いバージョンのTomcatを使用している場合を除く)、データソースの設定にはアプリケーションサーバーの設定を使用する必要があります。これには常に接続プールの設定が伴います。 –

+0

@SteveCは接続プールですか? 3つのラップトップをすべてlocalhost上で実行しているとしますが、それらはすべて同じリモートデータベースに接続されていますか?この場合プールが必要でしょうか? –

+0

10秒、100秒、または1000秒のユーザーを持つことができるようにスケールアップする必要がある場合は、接続プールを使用すると多くの手助けをします。 –

答えて

0

com.mysql.jdbc.jdbc2.optional.MysqlDataSourceは、基本的なデータソースです。つまり、接続を作成しますが、接続プールは提供しません。

接続の作成には、DriverManager.getConnectionと同じように、基本的なMySQL java.sql.Driverの実装が使用されます。言い換えれば、スレッド自体はドライバ自体と同じように安全です。

一般に、接続プールを使用することをお勧めします。アプリケーション/サーバー(またはTomcat)が提供する機能を使用するか、専用の接続プールライブラリ(例:HikariCP、DBCPなど)を使用してください。

+0

私が意味するのは、DataSourceはインターフェイスです... MysqlDataSourceは、DataSourceの実装です。私がds.getConnection()を呼び出すと、タイプMysqlDataSourceのオブジェクト(dsという)を作成すると、接続プールから接続が得られますか? ds.close()を呼び出すと、接続が閉じられ、プールに戻されますか? –

+0

@YusufJama私の答えを慎重に読んでください。明示的にそれに取り組んでいます:_ "接続を作成しますが、接続プールを提供しません" _。だから、接続プールは使用しません。また、データソースには 'close()'メソッドはありませんが、あなたが接続を意味していると仮定すると、 'MysqlDataSource'から直接取得した場合は、closeを呼び出すと物理接続が閉じられます。 –

関連する問題