ClickHouse R2dbc 使用整理

1.pom

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.clickhouse</groupId>
            <artifactId>clickhouse-r2dbc</artifactId>
            <version>0.4.6</version>
            <classifier>all</classifier>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.启动类

@SpringBootApplication(exclude = {R2dbcAutoConfiguration.class, R2dbcDataAutoConfiguration.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3.配置类

import io.r2dbc.spi.ConnectionFactories;
import io.r2dbc.spi.ConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ClickhouseConfig {

    @Bean
    public ConnectionFactory getClickhouseConnect(){
        //r2dbc:clickhouse:http://{username}:{password}@{host}:{port}/{database}
        return ConnectionFactories.get(String.format("r2dbc:clickhouse:http://%s:%s@%s:%d/%s",{username},{password},{host},{port},{database}));
    }

}

4.ck 操作

参考官方例子,亲测,可用



@Repository
public class ClickRepository {

    @Autowired
    ConnectionFactory connectionFactory;

    public Flux<ClickStats> getStatsByDomain(String domain){
        return Mono.from(connectionFactory.create())
                .flatMapMany(conn -> conn.createStatement("select domain, path,  toDate(cdate) as d, count(1) as count from clickdb.clicks where domain = :domain group by domain, path, d")
                        .bind("domain", domain)
                        .execute())
                .flatMap(result -> result.map((row, rowMetadata) -> new ClickStats(row
                        .get("domain", String.class), row.get("path", String.class), row.get("d", LocalDate.class),  row.get("count", Long.class))));
    }

    public Mono<Void> add(Click click){
        return Mono.from(connectionFactory.create())
                .flatMapMany(conn -> execute(click, conn)).then();
    }

    private Publisher<? extends Result> execute(Click click, Connection conn) {
        return conn.createStatement("insert into clickdb.clicks values (:domain, :path, :cdate, :count)")
        .bind("domain", click.getDomain())
        .bind("path", click.getPath())
                .bind("cdate", LocalDateTime.now())
                .bind("count", 1).execute();
    }

}

上面的配置是连接单节点,集群配置

参考源码:

ClickHouseNodes 中会解析url中host判断是否有“,”分隔符。

所以集群配置:

//r2dbc:clickhouse:http://{username}:{password}@{host}:{port}/{database}

host 可以配置多个,直接用“,”分割,亲测,可用。

相关推荐

  1. SpringBoot整合 R2DBC

    2024-05-13 17:20:04       20 阅读
  2. ClickHouse:真正的OLAP列式DBMS

    2024-05-13 17:20:04       42 阅读
  3. clickhouse使用心得

    2024-05-13 17:20:04       33 阅读
  4. 使用 db2diag 工具来分析 db2diag 日志文件

    2024-05-13 17:20:04       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 17:20:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 17:20:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 17:20:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 17:20:04       20 阅读

热门阅读

  1. 【C++】std::queue 标准库队列的使用

    2024-05-13 17:20:04       12 阅读
  2. MarkDown语法说明

    2024-05-13 17:20:04       12 阅读
  3. 海洋与地质地理信息数据下载网站汇总集锦

    2024-05-13 17:20:04       10 阅读
  4. 基于python的大麦网自动抢票工具的设计与实现

    2024-05-13 17:20:04       12 阅读
  5. ubuntu 磁盘扩容

    2024-05-13 17:20:04       9 阅读
  6. 如何使用Python提取文件名

    2024-05-13 17:20:04       12 阅读
  7. [Easy] leetcode-136 只出现一次的数字

    2024-05-13 17:20:04       12 阅读
  8. python面向对象

    2024-05-13 17:20:04       13 阅读
  9. Vue的生命周期函数有哪些?

    2024-05-13 17:20:04       9 阅读