2016-11-10 23 views
0

データソースで5000のSELECT文を実行し、結果を取り出し、5000の値を別のデータソースのテーブルに挿入する必要があります。私はJdbcTemplate.batchUpdateをやっている5000個の挿入のための5000 select文(全てが異なるSQL文です)私は(これは多くの時間がかかっている)1 ずつexeutingい300秒後のトランザクションタイムアウトWebsphere、バッチバッチ、DB2

()

上記ジョブの

30分ごとに実行する必要があります。私は、CRONによって30分ごとにトリガーされるこの仕事をするためにバネバッチを設定しました。

メソッドが呼び出されて5000個のselect文が完了したら、完了するまでに300秒以上かかるため、Websphereではタイムアウト例外がスローされます。世界の取引時間は300秒を超えています。

websphereでタイムアウトを増やすことはできますが、プロダクションではサーバープロファイルがデフォルトに設定されているため、これを行うことはできません。

誰かが私にこれを処理するためのよりよい方法を提案できますか?

答えて

0

を呼び出す前に、あなたのUserTransaction

transaction.setTransactionTimeout(int seconds) 

を使用して、現在のスレッド上のトランザクション・タイムアウトを増やすことができますし、それぞれの応答は、データベース側でどのくらいの時間がかかるかにかかわらず、ネットワーク待ち時間の別々の項目です。クエリーが単純であっても5000個の個別クエリを発行して個々の結果を待つ時間がかかるSELECT 1 FROM SYSIBM.SYSDUMMY1 s

複数のクエリの結果が同じ場合、クエリが結果の同じ番号を持つことが期待されている、あなたは彼らの結果列またはROW_NUMBER()で生成されたもののよう作らアップキーを介してそれらを結合することができます。

select a,b,c from .... and select a,e,f from...

select table1.a, b,c,d,e,f from 
table (select a,b,c from ...) table1, 
table (select a,e,f from ...) table2 
where 
table1.a = table2.a 

・ホープ、この変身します助けてください、

0

あなたの提案に感謝の印とTuran yuksel。私は問題を解決しました。

私は、5000平方メートルのリクエストの代わりに、5000平方メートルをより小さな単位に分割し、リクエストのリストとして処理しました。今ではバネバッチにタイムアウトの問題はありません。バッチトランザクションが300秒後にタイムアウトになったため、バッチバッチアイテムライターによるタイムアウト。

これで解決しました。これは、同様の問題に直面している人に役立ちます。

関連する問題