clickhouse-java
clickhouse-java copied to clipboard
[HTTP] When Apache Http Client is missing in classpath then JDK built-in one is silently selected.
Describe the bug
Http client provider is silently fallback to URL Connection client from JDK.
Steps to reproduce
- Create application without apache http client dependency
- Run application and connect to CH cloud
- Execute "select hostname()" with same client several times consequently.
- If apache http client is used - then host name in most times will be the same.
Expected behavior
- user should be notified if failover to not selected http client happens
- log warning should be printed if no apache http client is present in classpath while it is selected as client provider
I actually see a warning in my logs:
2024-05-02T15:49:54.336Z 4cc66bdf97da WARN [com.clickhouse.client.http.ClickHouseHttpConnectionFactory:164] - Error when creating APACHE_HTTP_CLIENT, fall back to HTTP_URL_CONNECTION
java.lang.Thread.run Thread.java: 829
java.util.concurrent.ThreadPoolExecutor$Worker.run ThreadPoolExecutor.java: 628
java.util.concurrent.ThreadPoolExecutor.runWorker ThreadPoolExecutor.java: 1128
java.util.concurrent.CompletableFuture$AsyncSupply.run CompletableFuture.java: 1700
com.clickhouse.client.AbstractClient.lambda$execute$0 AbstractClient.java: 273
com.clickhouse.client.AbstractClient.sendAsync AbstractClient.java: 161
com.clickhouse.client.http.ClickHouseHttpClient.send ClickHouseHttpClient.java: 90
com.clickhouse.client.AbstractClient.getConnection AbstractClient.java: 198
com.clickhouse.client.http.ClickHouseHttpClient.newConnection ClickHouseHttpClient.java: 26
com.clickhouse.client.http.ClickHouseHttpClient.newConnection ClickHouseHttpClient.java: 56
com.clickhouse.client.http.ClickHouseHttpConnectionFactory.createConnection ClickHouseHttpConnectionFactory.java: 22
java.lang.ClassLoader.loadClass ClassLoader.java: 527
jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass ClassLoaders.java: 178
jdk.internal.loader.BuiltinClassLoader.loadClass BuiltinClassLoader.java: 581
java.lang.ClassNotFoundException: org.apache.hc.core5.http.ClassicHttpRequest
java.lang.NoClassDefFoundError: org/apache/hc/core5/http/ClassicHttpRequest
Add this same version of httpclient5 in this project will be ok,current version is 0.6.1 with httpclient5 5.2.1 <dependency> <groupId>org.apache.httpcomponents.client5</groupId> <artifactId>httpclient5</artifactId> <version>5.2.1</version> </dependency>