首页 > 数据库 >springboot整合mysql和clickhouse多数据源

springboot整合mysql和clickhouse多数据源

时间:2023-06-23 14:00:09浏览次数:48  
标签:springboot 数据源 dynamic datasource spring import properties clickhouse

1、添加依赖

 <!-- MyBatis-Plus Starter -->  
  <dependency>  
    <groupId>com.baomidou</groupId>  
    <artifactId>mybatis-plus-boot-starter</artifactId>  
    <version>3.2.0</version>  
  </dependency>  
  <!-- MySQL JDBC Connector -->  
  <dependency>  
    <groupId>mysql</groupId>  
    <artifactId>mysql-connector-java</artifactId>  
    <version>8.0.26</version>  
  </dependency>  
  <!-- ClickHouse JDBC Connector -->  
  <dependency>  
    <groupId>ru.yandex.clickhouse</groupId>  
    <artifactId>clickhouse-jdbc</artifactId>  
    <version>0.2.4</version>  
  </dependency>  

2、配置文件

spring.datasource.dynamic.primary=master
spring.datasource.dynamic.strict=false
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://172.16.22.80:3306/hw-manage?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8&useSSL=false
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=root
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.click.url=jdbc:clickhouse://41.6.251.1:8123,41.6.251.2:8123,41.6.251.3:8123/vehicle_dev
spring.datasource.dynamic.datasource.click.type=ru.yandex.clickhouse.BalancedClickhouseDataSource
spring.datasource.dynamic.datasource.click.username=11
spring.datasource.dynamic.datasource.click.password=22
spring.datasource.dynamic.datasource.click.driver-class-name=ru.yandex.clickhouse.ClickHouseDriver

3、添加配置类

package com.zygh.hzhw.manage.config;
import com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator;
import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import ru.yandex.clickhouse.BalancedClickhouseDataSource;
import ru.yandex.clickhouse.settings.ClickHouseProperties;
import javax.sql.DataSource;
import java.util.Objects;

// 保证执行顺序在前面,否则 会被其他加载器给创建,导致自定义的加载器执行不到
@Order(0)
@Configuration
public class DynamicDataSourceConfig extends AbstractDataSourceCreator implements DataSourceCreator {


    @Override
    public DataSource doCreateDataSource(DataSourceProperty dataSourceProperty) {
        ClickHouseProperties properties = new ClickHouseProperties();
        properties.setUser("11");
        properties.setPassword("22");
        properties.setMaxThreads(10);
        properties.setAsync(true);
        properties.setMaxTotal(2000);
        properties.setDefaultMaxPerRoute(1000);
        properties.setBufferSize(2000);
        properties.setApacheBufferSize(2000);
        properties.setSocketTimeout(Integer.MAX_VALUE);
        properties.setMaxQuerySize(Long.MAX_VALUE);
        properties.setConnectionTimeout(10 * 60 * 1000);
        BalancedClickhouseDataSource clickhouseDataSource = new BalancedClickhouseDataSource("jdbc:clickhouse://41.6.251.1:8123,41.6.251.2:8123,41.6.251.3:8123/vehicle_dev", properties);
        return clickhouseDataSource;
    }

    @Override
    public boolean support(DataSourceProperty dataSourceProperty) {
        // 适配器模式,判断是否需要使用当前动态数据源创建
        Class<? extends DataSource> type = dataSourceProperty.getType();
        if (Objects.isNull(type)) {
            return Boolean.FALSE;
        }
        return StringUtils.equals(type.getName(), BalancedClickhouseDataSource.class.getName());
    }
}

 

标签:springboot,数据源,dynamic,datasource,spring,import,properties,clickhouse
From: https://www.cnblogs.com/liubaihui/p/17499076.html

相关文章

  • 基于SpringBoot实现SSMP整合的案例源码
    案例介绍:基于SpringBoot实现SSMP整合的案例之一(案例分析与模块创建)-掘金(juejin.cn)源码下载:点我......
  • springboot & mongodb test
    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>下载方式https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-os-x/docker方式do......
  • Springboot更改banner
    首先创建一个banner.txt。 将图像放到txt然后你启动就会发现: ......
  • SpringBoot内容协商机制
    1、是什么?SpringBoot内容协商机制是一种实现了内容协商(ContentNegotiation)的Web服务器,它可以根据客户端请求的不同,将响应返回给客户端。在传统的Web服务器中,如果客户端请求的URL与服务器上的URL不一致,服务器就会返回一个错误响应,告诉客户端所请求的URL不存在或者不合法。而Spri......
  • Springboot敏感字段脱敏的实现思路
    生产环境用户的隐私数据,比如手机号、身份证或者一些账号配置等信息,入库时都要进行不落地脱敏,也就是在进入我们系统时就要实时的脱敏处理。用户数据进入系统,脱敏处理后持久化到数据库,用户查询数据时还要进行反向解密。这种场景一般需要全局处理,那么用AOP切面来实现在适合不过了。......
  • SpringBoot - jackson 序列化配置,支持jdk8 时间类型和解决科学计数法
    jdk8时间序列化配置#Copy@ConfigurationpublicclassJacksonConfig{@BeanpublicObjectMapperserializingObjectMapper(){JavaTimeModulejavaTimeModule=newJavaTimeModule();/**序列化配置,针对java8时间**/javaTimeModule.add......
  • dw 的启动时初始化 动态数据源变成私有的 同时mq的监听要比bean后初始化,要么设置成懒
     将applicationContext里面获取到的bean添加到allrunner里面,进行 私有化部署数据源初始化 消费是优于一些bean,这个意思是消息消费注册的时候可能有一些bean还没有,所以等一会,消费者是先于一些bean的 Spring加载RocketMq消费者实例后会立即开始消费,不论Spring容器是否初......
  • springboot 默认配置的线程池
     线程池的大小通常都是我们比较关注的,SpringBoot会为系统做默认配置。如果不清楚SpringBoot默认配置的线程池的大小的话,容易线上踩坑。最近碰到一个生产问题,线上部署6台机器,定时任务A,B都在17:00执行,执行时会各自先获取分布式锁。(服务器时间是一致的)理论上是可以做到同......
  • springboot集成easyexcel实现导入导出
    1、添加依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>2、controller/***基于Liste......
  • springboot简单依赖
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/......