如何提高 Java 代码调用 webservice 并记录整个过程的速度?
How to improve velocity of Java code invoking webservice and logging the whole process?
我制作了一个 Java 应用程序,它从 Oracle 上的 table 读取一些行,然后为获取的每一行调用一个网络服务。
这个过程花费的时间比预期的要长。每秒大约调用 4 行,我预计每秒大约 50 行。
我使用 wsimport 工具生成文件以访问 web 服务。所有过程都使用库 slf4j 和 Log4j 进行记录。
我可以做些什么来提高整个过程的速度?
多线程在这种情况下有帮助吗?
这是我的代码简介:
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
}
}
多线程在这里可以为您提供帮助,因为行处理是独立的。有很多方法。我建议使用 java 中的 ExecutorService,它基本上会创建一个线程池,您可以在其中提交 Web 服务调用 (ExecutorService)。但最简单的解决方案是像这样将 Web 服务调用包装在 Runnable 中
new Thread(
new Runnable() {
@Override
public void run() {
Result resultws = Webservice.webservice(someInfo1, someInfo2);
}
}
).start();
我制作了一个 Java 应用程序,它从 Oracle 上的 table 读取一些行,然后为获取的每一行调用一个网络服务。
这个过程花费的时间比预期的要长。每秒大约调用 4 行,我预计每秒大约 50 行。
我使用 wsimport 工具生成文件以访问 web 服务。所有过程都使用库 slf4j 和 Log4j 进行记录。
我可以做些什么来提高整个过程的速度?
多线程在这种情况下有帮助吗?
这是我的代码简介:
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
}
}
多线程在这里可以为您提供帮助,因为行处理是独立的。有很多方法。我建议使用 java 中的 ExecutorService,它基本上会创建一个线程池,您可以在其中提交 Web 服务调用 (ExecutorService)。但最简单的解决方案是像这样将 Web 服务调用包装在 Runnable 中
new Thread(
new Runnable() {
@Override
public void run() {
Result resultws = Webservice.webservice(someInfo1, someInfo2);
}
}
).start();