0

サーブレット アーキテクチャ、Tomcat メカニズム、および DB プーリングを読んだ後、サーブレットの init で接続を開く (そして destroy で閉じる) 必要があるのだろうか? 私の目標は高いパフォーマンスを達成することなので、接続プールを使用する必要があると思います。最初に、Tomcat の組み込み DB プーリング メカニズムを使用します。

context.xml

<Context>
    <Resource name="jdbc/mytest" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="userxy" password="xy" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/mytest"/>
</Context>

ウェブ xml:

<resource-ref>
    <description>MyTest</description>
    <res-ref-name>jdbc/mytest</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

s.thで簡単に置き換えることができると確信しています。その他、必要に応じて。だから私の質問は: サーレットの init()/destroy() の代わりに doGet() と呼ばれるリクエストごとに使用し、プーリングメカニズムを信頼する必要がありますか? 両方使うとどうなる?

4

1 に答える 1

2

Init で接続を開き、Destroy で閉じると、ほぼ確実に問題が発生します。

サーブレットはマルチスレッドです。複数のスレッドを処理するサーブレットのインスタンスは 1 つしかありません。

たとえば、レコードを挿入してから last_insert_id() を取得するとします。実行中のスレッドが 1 つだけの場合は、問題なく動作します。2 つ以上のスレッドを実行している場合、一部のスレッドは間違った参照を取得します。

断然最良の方法は、要求に応じてプールから接続を取得し、終了時に finally ブロックで解放することです。

于 2012-06-04T12:28:06.133 に答える