私は、Oracle上のテーブルからいくつかの行を読み込んだ後、取得した各行に対してWebサービスを呼び出すJavaアプリケーションを作成しました。
このプロセスは予想以上に時間がかかります。 1秒あたり約4行が呼び出されているので、1秒あたり約50行が必要です。
wsimportツールを使用して、Webサービスにアクセスするためのファイルを生成しました。すべてのプロセスは、ライブラリslf4jとLog4jで記録されています。
プロセス全体の速度を向上させるために何ができますか?
この場合、マルチスレッドのヘルプが表示されますか?webserviceを起動し、プロセス全体を記録するJavaコードの速度を向上させるにはどうすればよいですか?
これは私のコードの簡単です:行の処理が独立しているbeacause
query = "select * from table name where to_char(DATE, 'hh24:mi:ss') >= '"+tMin+"' and to_char(DATE, 'hh24:mi:ss') < '"+tMax+"'";
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:"+connection_string);
stmt = con.createStatement();
rs = stmt.executeQuery(query);
while(rs.next()){
SomeBean n = new SomeBean();
n.setColumn1(rs.getString("Column1"));
n.setColumn2(rs.getString("Column2"));
n.setColumn3(rs.getString("Column3"));
n.setColumn4(rs.getString("Column4"));
n.setColumn5(rs.getString("Column5"));
v.add(n);
}
for(SomeBean s : v)
{
String Column1 = s.getColumn1);
String Column2 = s.getColumn2();
String Column3 = s.getColumn3();
String Column4 = s.getColumn4();
String Column5 = s.getColumn5();
someInfo1.setColumn1(Integer.parseInt(Column1));
someInfo1.setColumn2(Column2);
someInfo1.setColumn3(Column3);
someInfo2.setColumn4(Column4);
someInfo2.setColumn5(Integer.parseInt(Column5));
try
{
Result resultws = Webservice.webservice(someInfo1, someInfo2);
}
catch (Exception e)
{
//catch exception
}
}
ようにRunnableを内にWebサービスの呼び出しをラップすることですあなたは、ボトルネックを特定するためにJProfilerをまたはJVisualVMのようなプロファイラを使用しようとしましたか? –
はい、私はVisualVMを使用しましたが、どこを見て何をすべきかわかりません。スクリーンショットを投稿しました。 – Rodrick