Spring在服务器端超时

时间:2014-04-12 11:01:48

标签: spring timeout spring-ws

我使用spring Web服务公开了一些Web服务。

我想在服务器端设置最大超时,我的意思是,当客户端调用我的Web服务时,它不能持续超过固定时间。有可能吗?

我找到了很多关于客户端超时的信息,但没有找到服务器超时。

先谢谢。

2 个答案:

答案 0 :(得分:0)

这是在服务器本身而不是应用程序的级别设置的,因此它依赖于应用程序服务器。

这样做的原因是它是打开HTTP连接使用的侦听套接字的服务器代码,因此只有服务器代码可以通过将其传递给开始侦听给定端口的套接字API调用来设置超时。 / p>

例如,这是如何在文件server.xml中的Tomcat中执行此操作:

<Connector connectionTimeout="20000" ... />

答案 1 :(得分:0)

您可以通过使Web服务服务器触发另一个线程上的实际工作并自行倒计时并在超时后返回失败来解决此问题。

这是一个示例,它应该在10秒后超时:

public class Test {
private static final int ONE_SECOND = 1_000;

public String webserviceMethod(String request) {

    AtomicInteger counter = new AtomicInteger(0);
    final ResponseHolder responseHolder = new ResponseHolder();

    // Create another thread
    Runnable worker = () -> {
        // Do Actual work...
        responseHolder.finished = true;
        responseHolder.response = "Done"; // Actual response
    };

    new Thread(worker).start();

    while (counter.addAndGet(1) < 10) {
        try {
            Thread.sleep(ONE_SECOND);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (responseHolder.finished) {
            return responseHolder.response;
        }
    }

    return "Operation Timeout"; // Can throw exception here
}

private final class ResponseHolder {

    private boolean finished;
    private String response; // Can be any type of response needed
}

}