spring boot连接clickhouse集群,实现故障节点自动切换

程序去连接clickhouse集群,要求当连接到故障节点时,可以自动去连接后面的可用节点,实现高可用。

  1. 新建ClickhouseDatasource,使用自定义的datasource

    复制代码
    @Bean(name="clickHouseDataSource")
     public DataSource clickHouseDataSource() throws Exception {
         ClickHouseDataSourceWithFailover datasource = new ClickHouseDataSourceWithFailover(ConnectInfo.ckIPs, userName, password, 5000);
         return datasource;
     }
  2. 自定义ClickHouseDataSourceWithFailover,连接失败时自动连接下一个节点

    public class ClickHouseDataSourceWithFailover extends ClickHouseDataSource {
    private final List nodes;
    private final String username;
    private final String password;
    private final int timeout;

    复制代码
     public ClickHouseDataSourceWithFailover(List<String> nodes, String username, String password, int timeout) throws SQLException {
         super(String.format("jdbc:clickhouse://%s:8123/audit?connect_timeout=%d&socket_timeout=500000", nodes.get(0), timeout));
         this.nodes = nodes;
         this.username = username;
         this.password = password;
         this.timeout = timeout;
     }
    
     @Override
     public ClickHouseConnection getConnection() throws SQLException {
         for (String node : nodes) {
             try {
                 String url = String.format("jdbc:clickhouse://%s:8123/db?connect_timeout=%d&socket_timeout=500000", node, timeout);
                 Properties properties = new Properties();
                 properties.put("username", username);
                 properties.put("password", password);
    
                 ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);
                 return dataSource.getConnection();
             } catch (SQLException e) {
                 log.error("Failed to connect to node: {}, ex:{}", node, e);
             }
         }
         throw new SQLException("Unable to connect to any ClickHouse node.");
     }

    }

相关推荐
郑州光合科技余经理24 分钟前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
木头科技30 分钟前
【AI 工程化第八篇】Spring AI 多模型路由实战:DeepSeek、通义、Kimi、OpenAI 如何统一接入和自动切换
java·人工智能·spring
深盾科技_Virbox33 分钟前
云端与本地并行交付,软件许可管理如何实现统一运营?
java·大数据·开发语言·安全
thefool11226634 分钟前
多线程 3
java
CoderYanger40 分钟前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
马剑威(威哥爱编程)1 小时前
【AI全栈后端12-11】Spring Boot 把 AI 接口真正上线扛量:限流 / 降级 / 可观测
人工智能·spring boot·后端
liangbo71 小时前
01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清
java
xuxigifxfh1 小时前
HJ15 求int型正整数在内存中存储时1的个数
java·开发语言·华为机考
Wokoo71 小时前
自动化测试入门:核心场景、回归测试与 Web 自动化环境搭建
java·开发语言·测试工具
RuoyiOffice1 小时前
SpringBoot+Vue3+Onlyoffice 企业文件生命周期:上传、业务关联、权限、版本与安全清理
spring boot·vue3·文件管理·对象存储·权限控制·ruoyi office·附件管理