mybatis-plus+clickhouse+druid+多数据源+clickhouse array类型的读取和写入

本文介绍了如何在Java项目中配置dynamic-datasource-spring-boot-starter实现多数据源,并针对Clickhouse数据库,特别是Array类型的数据进行读写操作。详细讲解了动态数据源配置、Druid设置、JDBC批量写入Clickhouse以及Mybatis-Plus查询时自定义类型转换器的使用,解决了Array类型数据无法正常填充的问题。
摘要由CSDN通过智能技术生成

*clickhouse的安装且不说了。参考其他博客
本篇记录java

dynamic-datasource-spring-boot-starter 多数据源的配置

1. 引入相关依赖

	  <dependency>
	      <groupId>com.baomidou</groupId>
	      <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
	      <version>3.5.0</version>
	  </dependency>

2. 编写配置文件(含druid的相关配置)

这个地方需要说明一下, dynamic-datasource中内置了部分druid的配置项。如果完全按照druid之前的方式配置,配置项基本无法生效。所以将共性的配置放在 dynamic-datasource下,将图形化界面等单独配置。否则进入druid界面会看到配置的最大连接数等不生效。P6SPY需要引入对应的依赖。如果项目中没有引入,则删除该项。

spring:
  datasource:
    #此配置只在开发配置文件上开启,其他配置文件无需配置
    druid:
      # StatViewServlet配置
      stat-view-servlet:
        # 是否开启druid的数据统计界面 默认false
        enabled: true
        url-pattern: /druid/*
        #  登录监控界面的用户名以及密码,登录url为 IP:port/druid
        login-username: root
        login-password: 123456
        allow: 127.0.0.1,localhost
        deny:
        #  HTML页面上的“Reset All”功能
        reset-enable: false
      web-stat-filter:
        # 是否开启web-jdbc监控 默认是false
        enabled: true
        # 是否开启单个监控url调用的sql列表 默认开启
        profile-enable: true
        url-pattern: /*
        exclusions: /druid/*,*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico
        # 是否开启session统计 默认false
        session-stat-enable: true
        # 设置session统计的最大值 默认是1000
        session-stat-max-count: 1000
        # StatViewServlet配置
    dynamic:
      druid:
        # 连接池配置
        # 配置初始化大小、最小、最大
        initial-size: 5
        max-active: 200
        min-idle: 5
        # 连接超时时间
        max-wait: 6000
        # 间隔多久进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        time-between-eviction-runs-millis: 60000
        # 一个连接在连接池中最小的生存时间,单位是毫秒
        min-evictable-idle-time-millis: 120000
        # 用来检测连接是否有效的sql,要求是一个查询语句。 如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。
        validation-query: SELECT 1
        # 当从连接池借用连接时,是否测试该连接
        test-on-borrow: false
        # 在连接归还到连接池时是否测试该连接
        test-on-return: false
        # 当连接空闲时,是否执行连接测试
        test-while-idle: true
        # 是否缓存preparedStatement,也就是PSCache。 PSCache对支持游标的数据库性能提升巨大,比如说oracle。 在mysql5.5以下的版本中没有PSCache功能,建议关闭掉
        pool-prepared-statements: true
        # 要启用PSCache,必须配置大于0,当大于0时, poolPreparedStatements自动触发修改为true。 在Druid中,不会存在Oracle下PSCache占用内存过多的问题, 可以把这个数值配置大一些,比如说100
        max-pool-prepared-statement-per-connection-size: 100
        # 合并多个DruidDataSource的监控数据
        use-global-data-source-stat: true
      primary: mysql #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      p6spy: true
      datasource:
        mysql:
          # driver-class-name: com.mysql.cj.jdbc.Driver
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: XXX
          password: XXX
          url: jdbc:mysql://IP:PORT/DATABASE
        ck:
          driver-class-name: com.clickhouse.jdbc.ClickHouseDriver
          url: jdbc:clickhouse://IP:PORT/DATABASE
          username: XXX
          password: XXX

3. 在对应service添加@DS注解,本人是在clickhouse相关操作的类上添加了相应的注解。

jdbc操作批量写入clickHouse

处于保密的考虑,代码进行一些混淆。但是逻辑没变,主要问题在于clickhouse中的Array(T)类型的操作比较麻烦,在自动生成的sql语句中,每个数组中的每个字符串,两端必须要加上单引号。否则无法插入

/**
 * @author jasonyan
 * @description 针对表【Demo】的数据库操作Service实现
 * @createDate 2022-02-14 22:15:05
 */
@Service
@InterceptorIgnore
@DS("ck")
@Slf4j
public class ClickHouseServiceDemo extends ServiceImpl<DemoMapper, DemoCk>
        implements ClickHouseService {
   


    @Autowired
    DataSource dataSource;



    /**
     * 海量数据操作需要使用原生JDBC保持高效插入
     *
     * @throws Exception
     */
    public void batchInsert(List<DemoCk> cks) {
   
        // 不创建数据库的时候会有有个全局default数据库
        Connection connection = null;
        PreparedStatement ps = null;
        try {
   
        
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值