私のアプリケーションスタックは、Apache tomcat7でホストされているSpringMVC、Hibernate、およびMySQLで構成されています。
トランザクションを管理するためにSpringをセットアップしましたが、Hibernateセッションファクトリは接続を取得するためにtomcatdbcp接続プールでバックアップされたデータソースを利用しています。
私のアプリケーションには、Web UI(ボタンのクリックなど)を介して開始される長時間実行タスクを実行するユースケースがあります。このタスクは、たとえば10分間実行された後、接続プールが接続を閉じた例外をスローし始めます。これは明らかに、接続が特定の時間後にプールに戻されない場合、接続が放棄済みとしてマークされ、後で削除される接続プール設定が原因です。タイムアウト設定をいじって、十分な値に増やすことで、これを解決できます。しかし、私はこのような他のいくつかのユースケースを持っているかもしれず、それらがどれくらいの期間実行されるか現在のところわからないかもしれません。
そこで、ここで別のアプローチを考えています。
このユースケースはあまり頻繁に開始されないため、接続プールを使用せずに別のデータソース定義を使用する場合があります。もちろん、Springで「abc」と「xyz」という異なる名前で2つのトランザクションマネージャーを設定し、@ Transactional(name =” abc”)と@Transactional(name =” xyz)”を使用することもできます。これらのトランザクションマネージャーは両方とも、それぞれのデータソースを使用します。1つは一般的なユースケースをサポートする接続プールを備え、もう1つは長時間実行されるトランザクションをサポートする接続プールを備えていません。これにより、タイムアウト構成の変更について心配する必要がなくなります。
これは一般的に受け入れられている解決策ですか、それともタイムアウト構成アプローチを採用する必要がありますか?