java - 如何提高Java代码调用Web服务并记录整个过程的速度?

标签 java web-services log4j slf4j wsimport

我制作了一个 Java 应用程序,它从 Oracle 上的表中读取一些行,然后为获取的每一行调用一个 Web 服务。
这个过程花费的时间比预期要长。每秒大约调用 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
    }
}

VisualVM - CPU sample

最佳答案

多线程可以在这里帮助您,因为行处理是独立的。有很多方法。我建议使用 java 中的 ExecutorService,它基本上会创建一个 ThreadPool,您可以在其中提交 Web 服务调用 ( ExecutorService )。但最简单的解决方案是将 Web 服务调用包装在 Runnable 中,如下所示

new Thread(
            new Runnable() {

                @Override
                public void run() {
                    Result resultws = Webservice.webservice(someInfo1, someInfo2);
                }
            }
    ).start();

关于java - 如何提高Java代码调用Web服务并记录整个过程的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453443/

相关文章:

java - 如何在 maven 的 log4j 中配置 spring boot 默认日志记录模式?

java - 读取 Java ResultSet 中的整行

java - 在特定索引的文本中嵌入单词

java - 无法使用 Eclipse 调试 Web 服务

Spring 幕后日志记录

java - log4j冲突?

java - 测试它所说的已终止的输出

java - 在jsp中下载任何文件格式的内容类型应该是什么?

java - 打包 JAX-WS Web 服务

java - JUnit 测试无法从另一个模块类中读取属性文件