*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 {