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

    }

相关推荐
qq_124987075312 分钟前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_18 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.19 分钟前
Day06——权限认证-项目集成
java
瑶山21 分钟前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy28 分钟前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
2301_8187320630 分钟前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
2501_9419820543 分钟前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
马猴烧酒.1 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
sino爱学习2 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
风生u2 小时前
activiti7 详解
java