From 49e625fedd20daabda00fe7cca1589fa280a7af1 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Sat, 31 Jan 2026 21:46:35 +0800 Subject: [PATCH] Fix ClickHouse HTTP compression issue (#1449) - Set default compress_algorithm to 'none' to avoid magic value errors when HTTP compression is enabled on server side - This resolves the issue where enabling http compression in ClickHouse server causes 'Magic is not correct' error in JDBC driver - The fix ensures compatibility with servers that have 1 configured --- .../java/io/dataease/datasource/type/CK.java | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/datasource/type/CK.java b/core/core-backend/src/main/java/io/dataease/datasource/type/CK.java index 9f341936ee..6345821237 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/type/CK.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/type/CK.java @@ -11,25 +11,51 @@ import org.springframework.stereotype.Component; public class CK extends DatasourceConfiguration { private String driver = "com.clickhouse.jdbc.ClickHouseDriver"; private String extraParams = ""; + private String compressAlgorithm = "none"; // 默认设置为none以避免HTTP压缩问题 public String getJdbc() { if (StringUtils.isNoneEmpty(getUrlType()) && !getUrlType().equalsIgnoreCase("hostName")) { if (!getJdbcUrl().startsWith("jdbc:clickhouse")) { DEException.throwException("Illegal jdbcUrl: " + getJdbcUrl()); } + // 如果用户提供的JDBC URL中没有压缩算法设置,添加默认设置 + if (!getJdbcUrl().contains("compress_algorithm") && !getJdbcUrl().contains("enable_http_compression")) { + if (getJdbcUrl().contains("?")) { + return getJdbcUrl() + "&compress_algorithm=" + compressAlgorithm; + } else { + return getJdbcUrl() + "?compress_algorithm=" + compressAlgorithm; + } + } return getJdbcUrl(); } + StringBuilder jdbcUrl = new StringBuilder(); if (StringUtils.isEmpty(extraParams.trim())) { - return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE" - .replace("HOSTNAME", getLHost().trim()) - .replace("PORT", getLPort().toString().trim()) - .replace("DATABASE", getDataBase().trim()); + jdbcUrl.append("jdbc:clickhouse://") + .append(getLHost().trim()) + .append(":") + .append(getLPort().toString().trim()) + .append("/") + .append(getDataBase().trim()); } else { - return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE?EXTRA_PARAMS" - .replace("HOSTNAME", getLHost().trim()) - .replace("PORT", getLPort().toString().trim()) - .replace("DATABASE", getDataBase().trim()) - .replace("EXTRA_PARAMS", getExtraParams().trim()); + jdbcUrl.append("jdbc:clickhouse://") + .append(getLHost().trim()) + .append(":") + .append(getLPort().toString().trim()) + .append("/") + .append(getDataBase().trim()) + .append("?") + .append(getExtraParams().trim()); } + + // 如果URL中还没有压缩算法设置,添加默认设置 + if (!jdbcUrl.toString().contains("compress_algorithm") && !jdbcUrl.toString().contains("enable_http_compression")) { + if (jdbcUrl.toString().contains("?")) { + jdbcUrl.append("&compress_algorithm=").append(compressAlgorithm); + } else { + jdbcUrl.append("?compress_algorithm=").append(compressAlgorithm); + } + } + + return jdbcUrl.toString(); } }