@Test
    void serviceOptionsShouldOverrideVirtualHostTemplate() {
        final HttpService httpService = new HttpService() {
            @Override
            public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) {
                return HttpResponse.of("OK");
            }

            @Override
            public ServiceOptions options() {
                return SERVICE_OPTIONS;
            }
        };
        try (Server server = Server.builder()
                                   .virtualHost("example.com")
                                   .requestTimeoutMillis(20001)
                                   .maxRequestLength(20002)
                                   .requestAutoAbortDelayMillis(20003)
                                   .service("/test", httpService)
                                   .and()
                                   .build()) {
            final ServiceConfig sc = server.serviceConfigs()
                                           .stream()
                                           .filter(s -> s.route().paths().contains("/test"))
                                           .findFirst().get();

            assertThat(sc.requestTimeoutMillis()).isEqualTo(SERVICE_OPTIONS.requestTimeoutMillis());
            assertThat(sc.maxRequestLength()).isEqualTo(SERVICE_OPTIONS.maxRequestLength());
            assertThat(sc.requestAutoAbortDelayMillis()).isEqualTo(
                    SERVICE_OPTIONS.requestAutoAbortDelayMillis());
        }
    }
The priority of configurations from highest to lowest:
1. ServiceBinderBuilder
2. ServiceOptions (if exists)
3. VirtualHostBuilder
4. ServerBuilder
core/src/test/java/com/linecorp/armeria/server/ServiceOptionsTest.java