SpringBoot集成TDengine与DM8避坑指南
问题背景与现象分析
在完成产品项目转国产化(mysql->dm8)时遇到报错


分析:SpringBoot项目中同时集成TDengine和DM8数据库时,可能出现驱动冲突、连接池管理混乱或SQL语法兼容性问题。典型表现包括类加载冲突、连接泄漏或查询执行异常。
博主花了很多时间尝试了网上各种办法都无法解决,还有几种尝试过的方法没贴出来,博主只贴出了几种自认可行性强的方法(最终能解决方法在文章末尾):
方法1:给动态数据源配置独立的驱动类加载器
通过配置动态数据源,为达梦和TDengine分别指定独⽴的类加载器,避免驱动类加载冲突,彻底隔离 两者的解析逻辑。修改application.yml(或application.properties)的动态数据源配置

自定义类加载器(以TaosClassLoader为例,达梦同理):

核⼼作用:让达梦驱动和TDengine驱动在各⾃的类加载器环境中运⾏,互不干扰,彻底解决解析逻辑 冲突
方法2:更换达梦驱动版本(规避版本适配问题)
你当前使⽤的达梦Dm8版本(8.1.1.193)对应的DmJdbcDriver18,可能存在与TDengine3.6.0驱动 的适配bug,尝试更换达梦驱动版本,推荐两个适配性较好的版本:
•版本1:DmJdbcDriver18 8.1.2.18(适配Dm88.1.2+,修复了部分JDBC协议兼容问题)
•版本2:DmJdbcDriver11 8.1.1.193(对应达梦JDBC4.1规范,与TDengine驱动的兼容性更好) 修改pom.xml依赖(以更换为8.1.2.18为例)

说明:无需修改其他配置,仅更换达梦驱动版本,⼤概率可解决版本适配导致的解析冲突(亲测多个 项⽬中,达梦8.1.2+驱动与TDengine3.3.x+驱动兼容性更好)
serverIp: 127.0.0.1
spring:
# 关闭 SpringBoot 自动数据源配置
autoconfigure:
exclude:
- com.taosdata.jdbc.springboot.autoconfigure.TaosAutoConfiguration
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
# 多数据源手动配置
datasource:
dynamic:
primary: dm8
strict: true
datasource:
dm8:
url: jdbc:dm://${serverIp}:5236/SYSDBA?schema=BASE_CLOUD_WELDMES
driver-class-name: dm.jdbc.driver.DmDriver
type: com.alibaba.druid.pool.DruidDataSource
username: SYSDBA
password: ******
druid:
connect-timeout: 300
maxPoolPreparedStatementPerConnectionSize: 100
initialSize: 10
minIdle: 5
maxActive: 20
max-wait: 60000
min-evictable-idle-time-millis: 300000
time-between-eviction-runs-millis: 60000
validation-query: SELECT 1 FROM DUAL
test-on-borrow: false
test-on-return: false
test-while-idle: true
keep-alive: true
tdengine:
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
url: jdbc:TAOS-RS://${serverIp}:6041/
username: root
password: ******
redis:
host: ${serverIp}
port: 6379
password: ******
database: 0
mqtt:
host: localhost
port: 1888
clientId: xxxmes
username: admin
password: ******
如果能解决你的问题请大家留个脚印,最后祝大家少遇BUG!!!
更多推荐
所有评论(0)