最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在springboot中如何集成clickhouse進行讀寫操作

 更新時間:2024年11月18日 09:41:08   作者:oNuoyi  
本文介紹了在Spring Boot中集成ClickHouse的步驟,包括引入依賴、配置數(shù)據(jù)源、編寫實體類和Mapper類進行CRUD操作,特別提到批量插入時需要在SQL語句中添加`FORMAT`以避免錯誤,在實際應用中,與MySQL的操作類似,只需將ClickHouse當作MySQL使用

上篇文章講了如何在docker中搭建clickhouse,本篇記錄一下在springboot中如何集成clickhouse并進行讀寫

1、引入依賴

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--升級 druid驅動 1.1.10支持ClickHouse-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.13</version>
        </dependency>

2、編寫數(shù)據(jù)源配置

@Configuration
public class DruidConfig {

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:clickhouse://localhost:8123/test");
        dataSource.setInitialSize(10);
        dataSource.setMaxActive(100);
        dataSource.setMinIdle(10);
        dataSource.setMaxWait(-1);
        return dataSource;
    }

}

3、編寫表實體類

和mysql一模一樣寫法,對應的表我通過DBeaver已經(jīng)創(chuàng)建好了

package cn.yufire.sync.sls.getway.logs.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.io.Serializable;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "getway_logs")
@Data
public class GetwayLogs implements Serializable {
    /**
     * id
     */
    @TableField(value = "id")
    private Long id;

    /**
     * 接口名稱:網(wǎng)關上定義的名稱
     */
    @TableField(value = "api_name")
    private String apiName;

    /**
     * 響應體
     */
    @TableField(value = "response_body")
    private String responseBody;

    /**
     * 調用環(huán)境:TEST、RELEASE、PRE
     */
    @TableField(value = "api_stage_name")
    private String apiStageName;

    /**
     * 錯誤碼
     */
    @TableField(value = "error_code")
    private String errorCode;

    /**
     * 請求類型
     */
    @TableField(value = "http_method")
    private String httpMethod;

    /**
     * 接口請求地址
     */
    @TableField(value = "api_path")
    private String apiPath;

    /**
     * 接口請求全地址
     */
    @TableField(value = "api_full_path")
    private String apiFullPath;

    /**
     * 請求時間
     */
    @TableField(value = "request_time")
    private String requestTime;

    /**
     * 請求體
     */
    @TableField(value = "request_body")
    private String requestBody;

    /**
     * 網(wǎng)關請求阿里云創(chuàng)建
     */
    @TableField(value = "getway_request_id")
    private String getwayRequestId;

    /**
     * 阿里云網(wǎng)關應用id
     */
    @TableField(value = "getway_app_id")
    private String getwayAppId;

    /**
     * 請求協(xié)議,HTTP、HTTPS、...
     */
    @TableField(value = "request_protocol")
    private String requestProtocol;

    /**
     * 客戶端調用產(chǎn)生的隨機字符串
     */
    @TableField(value = "client_nonce")
    private String clientNonce;

    /**
     * 網(wǎng)關應用名稱
     */
    @TableField(value = "getway_app_name")
    private String getwayAppName;

    /**
     * 網(wǎng)關分組id
     */
    @TableField(value = "getway_group_id")
    private String getwayGroupId;

    /**
     * 客戶端ip
     */
    @TableField(value = "client_ip")
    private String clientIp;

    /**
     * 網(wǎng)關綁定域名
     */
    @TableField(value = "getway_bind_domain")
    private String getwayBindDomain;

    /**
     * 請求體大小
     */
    @TableField(value = "request_size")
    private Integer requestSize;

    /**
     * 響應體大小
     */
    @TableField(value = "response_size")
    private Integer responseSize;

    /**
     * 后端應用響應HTTP狀態(tài)碼
     */
    @TableField(value = "app_response_code")
    private Integer appResponseCode;

    /**
     * 分組名稱
     * */
    @TableField(value = "apiGroupName")
    private String apiGroupName;
}

4、創(chuàng)建一個mapper類進行增刪改查

因為我使用clickhouse只需要批量插入,所以就寫了一個批量插入的sql,當然mybatis-plus也有自帶的批量插入的方法,但是不是一條sql執(zhí)行的,而是通過批量執(zhí)行多條 SQL 語句來實現(xiàn)的,所以就手寫了一個批次插入的sql,這里有一個坑,批量插入clickhouse會報錯,單條插入沒問題,百度了發(fā)現(xiàn)批量插入各種小問題,需要在 Values前加一個FORMAT ,即 insert into x(xx,xx) FORMAT Values (),處理后就沒有報錯了

package cn.yufire.sync.sls.getway.logs.mapper;

import cn.yufire.sync.sls.getway.logs.pojo.GetwayLogs;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;

import java.util.List;

public interface GetwayLogsMapper extends BaseMapper<GetwayLogs> {

    /**
     * 批量插入網(wǎng)關日志
     *
     * @param list 數(shù)據(jù)
     * @return
     */
    @Insert("<script>insert into getway_logs(" +
            "api_name," +
            "response_body," +
            "api_stage_name," +
            "error_code," +
            "http_method," +
            "api_path," +
            "api_full_path," +
            "request_time," +
            "request_body," +
            "getway_request_id," +
            "getway_app_id," +
            "request_protocol," +
            "client_nonce," +
            "getway_app_name," +
            "getway_group_id," +
            "client_ip," +
            "getway_bind_domain," +
            "request_size," +
            "response_size," +
            "app_response_code" +
            ") FORMAT Values " +
            " <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n" +
            "     (" +
            "#{item.apiName}," +
            "#{item.responseBody}," +
            "#{item.apiStageName}," +
            "#{item.errorCode}," +
            "#{item.httpMethod}," +
            "#{item.apiPath}," +
            "#{item.apiFullPath}," +
            "#{item.requestTime}," +
            "#{item.requestBody}," +
            "#{item.getwayRequestId}," +
            "#{item.getwayAppId}," +
            "#{item.requestProtocol}," +
            "#{item.clientNonce}," +
            "#{item.getwayAppName}," +
            "#{item.getwayGroupId}," +
            "#{item.clientIp}," +
            "#{item.getwayBindDomain}," +
            "#{item.requestSize}," +
            "#{item.responseSize}," +
            "#{item.appResponseCode}" +
            ")\n" +
            "        </foreach>" +

            "</script>")
    Integer batchInsert(List<GetwayLogs> list);


}

在業(yè)務中調用

@Autowired
private GetwayLogsMapper getwayLogsMapper;

log.info("批量插入至數(shù)據(jù)庫中...,是否添加成功:{}", getwayLogsMapper.batchInsert(logs));

可以看到增刪改查操作和操作mysql的一模一樣,也就是說給clickhouse當成mysql用就行

在springboot中集成clickhouse中也遇到了一些報錯

ClickHouse exception, code: 1002

使用了clickhouse的依賴和jpa依賴總是跑不起來,一直報沒有驅動,給了驅動也不對

clickhouse集成springboot報錯Unable to determine Dialect to use [name=ClickHouse, majorVersion=22]; user must register resolver or explicitly set 'hibernate.dialect'

百度了各種最后看到這個,直接給clickhouse的依賴和jpa的依賴去掉就給clickhouse當成mysql結果就正常了

在docker中搭建部署clickhouse教程

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java操作mongodb示例分享

    java操作mongodb示例分享

    這篇文章主要介紹了java操作mongodb示例,實現(xiàn)了簡單的條件查詢和復雜的條件查詢,需要的朋友可以參考下
    2014-02-02
  • Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)

    Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)

    最近做項目遇到這樣的需求,天、小時、分鐘、秒的數(shù)值都是隔開的,服務器端只返回一個時間戳長度,怎么實現(xiàn)這樣的功能呢?下面小編給大家?guī)砹薐ava 實現(xiàn)倒計時功能的方案,需要的朋友參考下吧
    2018-01-01
  • idea新建mapper.xml文件詳細步驟如:mybatis-config

    idea新建mapper.xml文件詳細步驟如:mybatis-config

    這篇文章主要介紹了idea新建xml模板設置,例如:mybatis-config,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • mybatis TypeHandler注入spring的依賴方式

    mybatis TypeHandler注入spring的依賴方式

    這篇文章主要介紹了mybatis TypeHandler注入spring的依賴方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中的WeakHashMap、LinkedHashMap、TreeMap與Set詳解

    Java中的WeakHashMap、LinkedHashMap、TreeMap與Set詳解

    這篇文章主要介紹了Java中的WeakHashMap、LinkedHashMap、TreeMap與Set詳解,在JVM中,一個對象如果不再被使用就會被當做垃圾給回收掉,判斷一個對象是否是垃圾,我們的WeakHashMap就是基于弱引用,需要的朋友可以參考下
    2023-09-09
  • Java撲克牌速算24的方法

    Java撲克牌速算24的方法

    這篇文章主要為大家詳細介紹了Java撲克牌速算24的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • FactoryBean使用及真實應用場景分享

    FactoryBean使用及真實應用場景分享

    這段文章詳細介紹了FactoryBean在Spring中的應用,包括其定義、使用方法以及在Spring Boot中的實例,同時,探討了如何利用FactoryBean整合MyBatis,簡化了MyBatis與Spring的集成過程,通過FactoryBean,第三方庫可以被優(yōu)雅地加載到Spring容器中,提升了系統(tǒng)的靈活性和可擴展性
    2026-05-05
  • Java將集合List轉換成String字符串(或String轉換成List)詳解

    Java將集合List轉換成String字符串(或String轉換成List)詳解

    今天在寫項目的時候遇到一個問題,就是要把得到的一個集合轉換成字符串,下面這篇文章主要給大家介紹了關于Java將集合List轉換成String字符串(或String轉換成List)的相關資料,需要的朋友可以參考下
    2023-06-06
  • Java數(shù)據(jù)結構之選擇排序算法的實現(xiàn)與優(yōu)化

    Java數(shù)據(jù)結構之選擇排序算法的實現(xiàn)與優(yōu)化

    選擇排序:(Selection?sort)是一種簡單直觀的排序算法,也是一種不穩(wěn)定的排序方法。本文主要為大家介紹一下選擇排序的實現(xiàn)與優(yōu)化,希望對大家有所幫助
    2023-01-01
  • Java實現(xiàn)獲取兩個日期之間的所有日期的開始時間集合

    Java實現(xiàn)獲取兩個日期之間的所有日期的開始時間集合

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)獲取兩個日期之間的所有日期的開始時間集合,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考下
    2026-03-03

最新評論

南漳县| 巢湖市| 新丰县| 邳州市| 咸宁市| 盖州市| 长白| 疏勒县| 左贡县| 武陟县| 五常市| 镶黄旗| 铜川市| 邵东县| 额济纳旗| 新巴尔虎左旗| 彭阳县| 措勤县| 闸北区| 西城区| 东平县| 中西区| 吉水县| 文成县| 汉寿县| 湟源县| 吉林市| 永兴县| 萍乡市| 余庆县| 盖州市| 康保县| 墨脱县| 兴义市| 泸水县| 西宁市| 宜良县| 花莲市| 临汾市| 元朗区| 龙口市|