提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

由于业务需求,需要添加时序数据库涛思。在使用框架自带的多数据源发现在新增涛思数据表的时候代码一直报错,但实际上又能正常insert,报错如下(内容比较多没有截取完):

14:26:34.380 [mqtt-receive-6] DEBUG c.i.d.m.T.insertStatusHistory - [debug,135] - ==>  Preparing: insert into ? using iot_status_history TAGS(?, '1') VALUES (NOW, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)
14:26:34.381 [mqtt-receive-6] ERROR c.a.d.f.s.StatFilter - [mergeSql,160] - merge sql error, dbType taosdata, druid-1.2.23, sql : insert into ? using iot_status_history TAGS(?, '1')
        VALUES (NOW, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)
com.alibaba.druid.sql.parser.ParserException: illegal name, pos 13, line 1, column 13, token ?
	at com.alibaba.druid.sql.parser.SQLExprParser.name(SQLExprParser.java:2530)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseInsert0(SQLStatementParser.java:3318)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseInsert0(SQLStatementParser.java:3308)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseInsert(SQLStatementParser.java:3303)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:284)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:106)
	at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:164)
	at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:135)
	at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:158)
	at com.alibaba.druid.filter.stat.StatFilter.createSqlStat(StatFilter.java:692)
	at com.alibaba.druid.filter.stat.StatFilter.statementPrepareAfter(StatFilter.java:339)
	at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:118)
	at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:547)
	at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:328)


一、声明:此方法是模仿RuoYi-Vue-Plus框架修改的,具体的含义可以自行搜索查询。

二、操作步骤

1.根目录引入相关jar包,分别是涛思数据库、mybatis-plus、P6SPY

代码如下(示例):

<mybatis-plus.version>3.5.2</mybatis-plus.version>
<p6spy.version>3.9.1</p6spy.version>
<taos.version>3.2.2</taos.version>

<!--TD链接-->
<dependency>
    <groupId>com.taosdata.jdbc</groupId>
    <artifactId>taos-jdbcdriver</artifactId>
    <version>${taos.version}</version>
</dependency>
<!-- dynamic-datasource 多数据源-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>${p6spy.version}</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>

2.修改application-druid.yml的数据源配置如下:

代码如下(示例):

spring:
    datasource:
        type: com.zaxxer.hikari.HikariDataSource
        # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
        dynamic:
            # 性能分析插件(有性能损耗 不建议生产环境使用)
            p6spy: true
            # 设置默认的数据源或者数据源组,默认值即为 master
            primary: master
            # 严格模式 匹配不到数据源则报错
            strict: true
            datasource:
                # 主库数据源
                master:
                    type: ${spring.datasource.type}
                    driverClassName: com.mysql.cj.jdbc.Driver
                    # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
                    # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
                    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
                    username: root
                    password: root
                slave:
                    type: ${spring.datasource.type}
                    driverClassName: com.taosdata.jdbc.TSDBDriver
                    url: jdbc:TAOS://localhost:6030/locator?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                    username: root
                    password: taosdata
            hikari:
                # 最大连接池数量
                maxPoolSize: 20
                # 最小空闲线程数量
                minIdle: 10
                # 配置获取连接等待超时的时间
                connectionTimeout: 30000
                # 校验超时时间
                validationTimeout: 5000
                # 空闲连接存活最大时间,默认10分钟
                idleTimeout: 600000
                # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
                maxLifetime: 1800000
                # 多久检查一次连接的活性
                keepaliveTime: 30000

3.在admin模块添加spy.properties配置文件如下,最重要的是最后一行!否则涛思数据库会连接失败!

# p6spy 性能分析插件配置文件
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# # 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#设置 p6spy driver 代理
#deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
## 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# SQL语句打印时间格式
databaseDialectTimestampFormat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
# 是否过滤 Log
filter=true
# 过滤 Log 时所排除的 sql 关键字,以逗号分隔
exclude=SELECT 1

在这里插入图片描述

4.删除framework模块中的DataSourceAspect.java、DruidConfig.java和DruidProperties.java这三个类

在这里插入图片描述

5.使用方法:主数据库不需要处理,在从数据库相关的service层中使用@DS(“slave”)即可。

@Slf4j
@Service
@DS("slave")
public class TdServiceImpl implements ITdService {

    @Autowired
    private TdMapper tdMapper;

    @Override
    public int insertHistory(History history){
        return tdMapper.insertDataHistory(history);
    }
}

注意

在实际操作过程中可能会出现各种报错,这些报错是缓存引起的,多次删除缓存、clean即可。如果还是有问题,可以直接下载RuoYi-Vue-Plus框架直接查看。
下载地址:https://gitee.com/dromara/RuoYi-Vue-Plus/

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐