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

    }

相关推荐
一定要AK5 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao5 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao6 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
迷藏4946 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
總鑽風6 小时前
搭建Spring Boot + ELK日志平台,实现可视化日志监控
spring boot·elk·macos
不吃香菜学java7 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
wuxinyan1237 小时前
Java面试题47:一文深入了解Nginx
java·nginx·面试题
新知图书7 小时前
搭建Spring Boot开发环境
java·spring boot·后端
皮皮林5517 小时前
SpringBoot 4 最被低估的新特性:Spring Data AOT
spring boot
冰河团队7 小时前
一个拉胯的分库分表方案有多绝望?整个部门都在救火!
java·高并发·分布式数据库·分库分表·高性能