Spring boot 为WebSphereSpring启动应用程序设置超时

Spring boot 为WebSphereSpring启动应用程序设置超时,spring-boot,jax-rs,websphere,Spring Boot,Jax Rs,Websphere,我正在使用一个运行在LibertyCode服务器上的spring启动应用程序 我有一个配置了超时的web服务器: ClientConfig configuration = new ClientConfig(); configuration.property(ClientProperties.CONNECT_TIMEOUT, connecTimeout); configuration.property(ClientProperties.READ_TIMEOUT, r

我正在使用一个运行在LibertyCode服务器上的spring启动应用程序

我有一个配置了超时的web服务器:

ClientConfig configuration = new ClientConfig();
        configuration.property(ClientProperties.CONNECT_TIMEOUT, connecTimeout);
        configuration.property(ClientProperties.READ_TIMEOUT, readTimeout);
        apiClient = ClientBuilder.newClient(configuration);
        WebTarget target = apiClient.target(uri);
        Response response = target.request(MediaType.APPLICATION_JSON_VALUE).header("accept", "application/json")
                .header("Content-Type", "application/json").get();
它可以在我的本地机器上完美地工作(基于tomcat而不使用websphere) 但是当我在WebSphere服务器上运行war时,超时被忽略了! 这就是我的server.xml中使用的功能:

   <feature>localConnector-1.0</feature>
        <feature>restConnector-1.0</feature>
        <feature>beanValidation-1.1</feature>
        <feature>adminCenter-1.0</feature>
        <feature>transportSecurity-1.0</feature>
localConnector-1.0
restConnector-1.0
beanValidation-1.1
adminCenter-1.0
运输安全-1.0

请提供任何帮助

能否尝试将
restConnector-1.0
更改为
restConnector-2.0
?我认为1.0连接器泄漏了JAX-RS(基本上包括应用程序的JAX-RS),即使您打包了自己版本的JAX-RS和CXF,等等。当这种情况发生时,您会得到Liberty版本的JAX-RS(它基于CXF,但不允许用户加载特定于CXF的实现类)对于API,甚至可能是一些实现类。此外,我认为restConnector-1.0特性使用了旧版本的JAX-RS,它可能不支持连接和读取超时

如果迁移到restConnector-2.0不起作用,那么我建议显式添加
jaxrs-2.1
特性,然后使用JAX-rsapi而不是特定于实现的api。它看起来像:

Client apiClient = ClientBuilder.newBuilder()
                                .connectTimeout(connecTimeout)
                                .readTimeout(readTimeout)
                                .build();
WebTarget target = apiClient.target(uri);
Response response = target.request(MediaType.APPLICATION_JSON)
                          .header("Content-Type", MediaType.APPLICATION_JSON)
                          .get();

希望这有帮助

能否尝试将
restConnector-1.0
更改为
restConnector-2.0
?我认为1.0连接器泄漏了JAX-RS(基本上包括应用程序的JAX-RS),即使您打包了自己版本的JAX-RS和CXF,等等。当这种情况发生时,您会得到Liberty版本的JAX-RS(它基于CXF,但不允许用户加载特定于CXF的实现类)对于API,甚至可能是一些实现类。此外,我认为restConnector-1.0特性使用了旧版本的JAX-RS,它可能不支持连接和读取超时

如果迁移到restConnector-2.0不起作用,那么我建议显式添加
jaxrs-2.1
特性,然后使用JAX-rsapi而不是特定于实现的api。它看起来像:

Client apiClient = ClientBuilder.newBuilder()
                                .connectTimeout(connecTimeout)
                                .readTimeout(readTimeout)
                                .build();
WebTarget target = apiClient.target(uri);
Response response = target.request(MediaType.APPLICATION_JSON)
                          .header("Content-Type", MediaType.APPLICATION_JSON)
                          .get();

希望这有帮助

您的意思是超时发生在较低的值,较高的值?您的意思是超时发生在较低的值,较高的值?在更改功能后,调用外部API时出现“javax.ws.rs.ProcessingException:javax.net.ssl.SSLHandshakeException:Received fatal alert:handshake_failure”是正常的吗?否,这听起来像是SSL层中的错误。可能是服务器使用了不熟悉的证书或类似的东西。Liberty允许您指定自己的SSL密钥和信任存储。我想检查Liberty SSL文档,然后如果您仍然看到问题,发布一个新问题。在更改功能后,调用外部API时出现“javax.ws.rs.ProcessingException:javax.net.SSL.SSLHandshakeException:Received fatal alert:handshake_failure”,这正常吗?不,这听起来像是SSL层中的错误。可能是服务器使用了不熟悉的证书或类似的东西。Liberty允许您指定自己的SSL密钥和信任存储。我建议你检查Liberty SSL文档,然后如果你仍然看到问题,就发布一个新问题。