SpringBoot整合TDengine 3.0.7.1多数据源实战:从JDBC直连到MyBatisPlus动态切换

SpringBoot整合TDengine 3.0多数据源实战:从JDBC直连到MyBatisPlus动态切换

最近在做一个工业物联网项目,需要处理海量的传感器时序数据,比如温度、压力、电压这些每秒都在产生的指标。传统的MySQL在处理这类高频写入和按时间范围聚合查询时,很快就遇到了瓶颈。团队评估了几款时序数据库,最终选择了TDengine,看中的就是它宣称的高性能、SQL兼容性以及相对友好的开源协议。

但在实际引入过程中,我们面临一个很现实的问题:项目里已经存在大量的业务逻辑是基于MySQL和MyBatisPlus构建的,不可能把所有数据都迁移到TDengine。这就意味着,我们的SpringBoot应用需要同时与关系型数据库时序数据库打交道,也就是所谓的“多数据源”场景。更具体地说,我们需要在同一个服务里,让部分DAO操作MySQL,另一部分DAO操作TDengine,并且两者要能平滑共存,互不干扰。

网上关于SpringBoot多数据源的资料不少,但结合TDengine这种特殊数据库的实战分享却不多见,尤其是涉及到连接方式选择、连接池调优、以及如何与MyBatisPlus优雅集成时,坑点不少。我花了些时间,把JDBC原生连接和基于dynamic-datasource-spring-boot-starter的动态数据源两种主流方案都实践了一遍,过程中也记录了一些性能对比和配置心得。这篇文章,我就把这些实战经验系统地梳理出来,希望能给面临类似场景的开发者提供一个清晰的参考路径。

1. 理解TDengine的连接方式与选型考量

在动手写代码之前,搞清楚TDengine的两种连接方式是至关重要的,这直接决定了后续整合的架构和性能基线。TDengine服务端主要由taosd核心进程和taosAdapter组件构成,客户端与之通信,主要就两条路:

  • 原生连接:客户端驱动taosc直接与taosd进程建立TCP连接。这是性能最高的方式,延迟最低,吞吐量最大。
  • REST连接:客户端通过HTTP/RESTful API与taosAdapter组件交互,再由taosAdapter转发请求给taosd。这种方式更通用,绕过了一些本地依赖。

两种方式在JDBC URL上就有明显区别:

// 原生连接 JDBC URL
jdbc:TAOS://192.168.1.100:6030/my_db

// REST连接 JDBC URL
jdbc:TAOS-RS://192.168.1.100:6041/my_db

端口号也不同,6030taosd的默认端口,6041(或其他配置的端口)是taosAdapter的REST服务端口。

那么,在SpringBoot项目中我们该如何选择?

我的建议是,对于追求极致性能的生产环境,优先使用原生连接。官方文档也提到,REST连接的性能相比原生连接有大约30%的损耗。这个损耗对于写入密集型或高频查询的时序场景来说,是不能忽视的。

注意:如果你选择使用REST连接,务必确保TDengine服务器上的taosAdapter服务已经启动。非Docker安装方式有时需要手动启动它:systemctl start taosadapter

选择原生连接也意味着,部署应用的服务器上需要安装TDengine的客户端驱动(taosc)。这通常不是大问题,通过rpmdeb包安装即可。对于容器化部署,需要在构建Docker镜像时包含这个客户端库。

连接池的选择:无论是连接MySQL还是TDengine,生产环境都必须使用连接池。Druid凭借其强大的监控和防SQL注入能力,依然是很多团队的首选。HikariCP以性能著称,也是不错的选择。在本文的实践中,我会以Druid为例进行配置,并分享一些针对时序数据库场景的调优参数。

2. 方案一:基于JDBC与多数据源Bean的“硬核”整合

第一种方案比较“传统”,思路清晰:我们手动创建多个DataSource Bean,分别对应MySQL和TDengine。然后通过JdbcTemplate或者直接获取Connection来执行SQL。这种方案不依赖特定的多数据源框架,控制粒度细,适合对MyBatisPlus等ORM工具集成有顾虑,或者需要高度定制化JDBC操作的场景。

2.1 项目依赖与核心配置

首先,在pom.xml中引入必要的依赖。除了SpringBoot Web、Lombok等基础依赖,关键的是MySQL驱动、TDengine的JDBC驱动以及Druid连接池。

<dependencies>
    <!-- SpringBoot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    <!-- TDengine JDBC驱动 (使用原生连接) -->
    <dependency>
        <groupId>com.taosdata.jdbc</groupId>
        <artifactId>taos-jdb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值