我正在使用在LibertyCode服务器上运行的spring boot应用程序,
我有一个配置了超时的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();
它在我的本地计算机上完美运行(基于没有Websphere的tomcat)但是当我在WebSphere服务器上进行战争时,超时是ignored!这就是我的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>
请任何帮助
您可以尝试将<feature>restConnector-1.0</feature>
更改为<feature>restConnector-2.0</feature>
吗?我认为1.0连接器会泄漏JAX-RS-基本上将其包括在应用程序中,即使您打包自己的JAX-RS和CXF版本,等等。发生这种情况时,您会得到Liberty的JAX-RS版本(基于CXF,但不允许用户为API甚至可能为某些实现类加载特定于CXF的实现类。此外,我认为restConnector-1.0功能使用的JAX-RS较旧版本可能不支持连接和读取超时。
如果移至restConnector-2.0无效,那么我建议显式添加jaxrs-2.1
功能,然后使用JAX-RS API而非特定于实现的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();
希望这会有所帮助!