2

ヘルパー クラスで Oracle DB の接続プールをセットアップしたいと考えています。

public class DbConnection {

// Data source for the pooled connection
private static OracleDataSource dataSource;

// Host
private static final String dbHost = "bla";

// Port
private static final String dbPort = "1521";

// DBname
private static final String database = "orcl";

// DBuser
private static final String dbUser = "bla";

// DBpassword
private static final String dbPassword = "bla";

static {
    OracleConnectionPoolDataSource opds;
    try {
        opds = new OracleConnectionPoolDataSource();
        opds.setURL("jdbc:oracle:thin:@" + dbHost + ":" + dbPort + ":"
                + database);
        opds.setUser(dbUser);
        opds.setPassword(dbPassword);
        dataSource = opds;
    } catch (SQLException e1) {
        System.err.println("Connection failed!");
    }
    try {
        // Load driver
        Class.forName("oracle.jdbc.driver.OracleDriver");

    } catch (ClassNotFoundException e) {
        System.out.println("Driver not found!");
    }
}

public static Connection getConnection() throws SQLException {
    return dataSource.getConnection();
}
}

これは機能していますが、それほど高速ではないため、プーリングを機能させるには何かが足りないと思います。助言がありますか?

したがって、私の外部クラスは getConnection() メソッドを呼び出すだけです...

Connection conn = DbConnection.getConnection();
...
conn.close();
4

3 に答える 3

2

ConnectionPoolDataSourceを直接使用しないでください。これは、アプリケーション サーバーの接続プールで使用するためのものです。接続プーリング自体は提供しません。https://stackoverflow.com/a/12651163/466862も参照してください。

つまり、DBCP、c3p0、BoneCP、または UCP (Universal Connection Pool) などの実際の接続プールを使用する必要があります。

于 2012-09-30T11:05:06.260 に答える
1

OracleDataSource (OracleConnectionPoolDataSource ではない) を使用し、setConnectionCachingEnabled(true) を設定する必要があります。

     private  static OracleDataSource ods = null;
     ...
     static {
        System.out.println("OracleDataSource Initialization");
        try {
            ods = new OracleDataSource();
            ods.setConnectionCachingEnabled(true);
            ods.setConnectionCacheName("mycache");
            ods.setURL("jdbc:oracle:thin:@//server.local:1521/prod");
            ods.setUser("scott");
            ods.setPassword("tiger");
            Properties cacheProps = new Properties();
            cacheProps.setProperty("MinLimit", "1");
            cacheProps.setProperty("MaxLimit", "4");
            cacheProps.setProperty("InitialLimit", "1");
            cacheProps.setProperty("ConnectionWaitTimeout", "5");
            cacheProps.setProperty("ValidateConnection", "true");
            ods.setConnectionCacheProperties(cacheProps);

        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
...
    public static Connection getConnection()
       throws SQLException {
      return ods.getConnection();
    }

ここに完全な例があります。

于 2012-09-30T13:52:45.597 に答える
1

oracle.jdbc.pool.OracleDataSource.setConnectionCachingEnabledドキュメントには次のように記載されています。

非推奨。代わりに、Oracle Universal Connection Pool を使用してください。

Oracle Database UCPをダウンロードしてDataSource、次のように作成できます。

import oracle.jdbc.pool.OracleDataSource;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;

PoolDataSource poolDataSource = PoolDataSourceFactory.getPoolDataSource();
poolDataSource.setConnectionFactoryClassName(OracleDataSource.class.getName());
poolDataSource.setURL("jdbc:oracle:thin:@localhost:1521:XE");
poolDataSource.setUser("SYSTEM");
poolDataSource.setPassword("****");
于 2016-11-28T15:02:21.177 に答える