Backend Development 5 min read

Why Spring Boot’s connectionTimeout Doesn’t Affect Request Time – Experiments Explained

This article experiments with Spring Boot’s Tomcat connectionTimeout setting using controller delays, HttpURLConnection requests, and raw socket connections, demonstrating that the timeout only applies when a client stays idle after connecting, not to request processing time or client type.

Spring Full-Stack Practical Cases
Spring Full-Stack Practical Cases
Spring Full-Stack Practical Cases
Why Spring Boot’s connectionTimeout Doesn’t Affect Request Time – Experiments Explained

Environment: Spring Boot 2.5.12

application.yml configuration:

<code>server:
  port: 8081
  tomcat:
    maxThreads: 10
    maxConnections: 10
    acceptCount: 1
    connectionTimeout: 3000
</code>

Test 1: In a controller, sleep 10 s > connectionTimeout.

<code>@RestController
@RequestMapping("/test")
public class TestController {

  @GetMapping("/index")
  public Object index() {
    try {
      System.out.println(Thread.currentThread().getName());
      TimeUnit.SECONDS.sleep(10);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return "success";
  }
}
</code>

Result: the program responds normally.

Conclusion: The connectionTimeout parameter is unrelated to the actual request processing time.

Test 2: Send a request with HttpURLConnection.

<code>public class HttpURLConnectionDemo {
  public static void main(String[] args) throws Exception {
    HttpURLConnection con = (HttpURLConnection) new URL("http://localhost:8081/test/index").openConnection();
    con.setDoInput(true);
    con.setDoOutput(true);
    long start = System.currentTimeMillis();
    InputStream is = con.getInputStream();
    Scanner scan = new Scanner(is);
    while (scan.hasNext()) {
      System.out.println("Received: " + scan.next() + "\nTime: " + (System.currentTimeMillis() - start));
    }
    scan.close();
    con.disconnect();
  }
}
</code>

Result shown in the image:

Conclusion: connectionTimeout does not depend on the client type that makes the request.

Test 3: Connect via raw Socket.

<code>public class TomcatConnectionTimeoutDemo {
  public static void main(String[] args) throws Exception {
    Socket socket = new Socket("127.0.0.1", 8081);
    long start = System.currentTimeMillis();
    InputStream is = socket.getInputStream();
    is.read();
    System.out.println(System.currentTimeMillis() - start);
  }
}
</code>

Result (≈3 s) shown in the image:

Extended test: after establishing the socket, a separate thread continuously writes data from console input while the main thread reads. When no data is sent for more than the configured connectionTimeout (3 s), the connection is closed.

<code>public class TomcatConnectionTimeoutDemo {
  public static void main(String[] args) throws Exception {
    Socket socket = new Socket("127.0.0.1", 8081);
    long start = System.currentTimeMillis();
    final OutputStream os = socket.getOutputStream();
    new Thread(() -> {
      Scanner scan = new Scanner(System.in);
      while (scan.hasNext()) {
        String content = scan.next();
        System.out.println("Preparing to send: " + content);
        try {
          os.write(content.getBytes());
          os.flush();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }).start();
    InputStream is = socket.getInputStream();
    is.read();
    System.out.println(System.currentTimeMillis() - start);
  }
}
</code>

Result when nothing is sent (image 1) and when continuously sending input (image 2) are shown.

Final conclusion: The connectionTimeout setting controls how long the server will keep a TCP connection open after the client has connected but does not send any data; if the client remains idle longer than this timeout, the server closes the connection.

BackendJavaSpringBootTomcatSockethttpurlconnectionconnectionTimeout
Spring Full-Stack Practical Cases
Written by

Spring Full-Stack Practical Cases

Full-stack Java development with Vue 2/3 front-end suite; hands-on examples and source code analysis for Spring, Spring Boot 2/3, and Spring Cloud.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.