3

プールの PreparedStatements を使用するように dbcp を設定する方法を知りたいです。接続プールが機能しているようですが、準備されたステートメントの例があまり見つかりません。PreparedStatement プールの使用に関する関連する質問がありますが、最初に設定する詳細については省略されています。どうやら aを に渡す必要があるようですが、どの実装を使用する必要があるのか​​ 、コンストラクターが必要とするオブジェクトを作成する方法がまったくわかりません。KeyedObjectPoolFactoryPoolableConnectionFactory

現在、接続プールを設定している方法は次のとおりです。

private PoolingDataSource setupDataSource() {
    ConnectionFactory connection_factory = new ConnectionFactoryImpl();
    ObjectPool connection_pool = new GenericObjectPool();
    PoolableConnectionFactory poolable_connection_factory = new PoolableConnectionFactory(connection_factory, connection_pool, null, "select 1", false, true);
    PoolingDataSource data_source = new PoolingDataSource(connection_pool);

    return data_source;
}

private static class ConnectionFactoryImpl implements ConnectionFactory {
    private Properties connection_properties = new Properties();

    public ConnectionFactoryImpl() {
        connection_properties.put("user", USER);
        connection_properties.put("password", PASSWORD);
        connection_properties.put("zeroDateTimeBehavior", "convertToNull");
        connection_properties.put("jdbcCompliantTruncation", "false");
    }

    @Override
    public Connection createConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:mysql://" + SERVER + "/" + DEFAULT_DB, connection_properties);
    }
}

これは、プリペアド ステートメントのプーリングを制御する の 3 番目のパラメーターPoolableConnectionFactoryですが、そこで何を使用すればよいかわかりません。

4

1 に答える 1

1

スプリングを使用している場合は、すべてを設定するヘルパーがあります。ただし、ステートメントプーリングはデフォルトで無効になっているため、次の最後の2つの設定を追加する必要があります。

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
    <property name="driverClassName" value="${database.driverClassName}"/>
    <property name="url" value="${database.url}"/>
    <property name="username" value="${database.username}"/>
    <property name="password" value="${database.password}"/>
    <property name="validationQuery" value="SELECT 1 FROM DUAL"/>
    <property name="testOnBorrow" value="true"/>
    <property name="initialSize" value="1"/>
    <property name="minIdle" value="1"/>
    <property name="maxActive" value="10"/>
    <property name="poolPreparedStatements" value="true"/>
    <property name="maxOpenPreparedStatements" value="20"/>
</bean>

スタンドアロンアプリ用のBasicDataSourceを作成する例を次に示します 。http ://www.kodejava.org/examples/803.html

それができたら、次のようにします。

dataSource.setPoolPreparedStatements(true)
dataSource.setMaxOpenPreparedStatements(20);
于 2012-09-04T21:22:31.790 に答える