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<String> 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.");
     }

    }

相关推荐
图梓灵几秒前
JVM内存模型深度解剖:分代策略、元空间与GC调优实战
java·jvm·笔记
D_aniel_4 分钟前
排序算法-希尔排序
java·算法·排序算法·希尔排序
越来越无动于衷14 分钟前
JAVA多态——向上转型
java·开发语言
等个结果20 分钟前
应用服务器Tomcat
java·tomcat
cooldream20091 小时前
有状态服务、无状态服务与Session机制详解
java·开发语言·系统架构师
weixin_436525071 小时前
芋道框架 账号未登录、租户标识未传递
java·linux·服务器
magic 2451 小时前
第2章——springboot核心机制
java·spring boot·spring
YKPG1 小时前
C++学习-入门到精通-【5】类模板array和vector、异常捕获
java·c++·学习
Q_Q19632884751 小时前
python小区物业管理系统-小区物业报修系统
开发语言·spring boot·python·django·flask·node.js·php
一只蒟蒻ovo1 小时前
操作系统导论——第27章 插叙:线程API
java·开发语言