【Java】RuoYi-Vue-Plus 多数据源整合TDengine时序数据库——服务端自动建库建表

目录

  • 环境准备
  • 整合TDengine 数据源
    • 1. 添加驱动依赖
    • 2. 添加数据源配置
    • 3. 添加Mapper
    • 4. 添加建表sql脚本
    • 5. Controller
  • 测试效果

环境准备

  • RuoYi-Vue-Plus v5.1.2
  • JDK17
  • Maven 3.6.3
  • Redis 5.X
  • MySQL 5.7+
  • TDengine 2.6.0.34 客户端

整合TDengine 数据源

1. 添加驱动依赖

注意: 驱动依赖的版本需要根据官网 说明选择你所安装的 TDengine 对应版本。

        <dependency>
            <groupId>com.taosdata.jdbc</groupId>
            <artifactId>taos-jdbcdriver</artifactId>
            <version>2.0.38</version>
        </dependency>

驱动依赖添加在 RuoYi-Vue-Plusruoyi-admin 模块的 pom 文件中。

2. 添加数据源配置

数据源配置添加在 RuoYi-Vue-Plusruoyi-admin 模块的 application-dev 文件中,具体配置如下图。

在这里插入图片描述
注意: 此处 TDengine 是数据源采用的是 taos原生连接,并且数据源配置信息没有指定到具体的数据库

3. 添加Mapper

DatabaseMapper.java

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


public interface DatabaseMapper {

    @DS("taos")
    @InterceptorIgnore(tenantLine = "true")
    List<Map<String, Object>> showDatabaseList();

    /**
     * 建数据库
     *
     * @param databaseName 数据库名
     */
    @DS("taos")
    @InterceptorIgnore(tenantLine = "true")
    void createDatabase(@Param("databaseName") String databaseName);

    /**
     * 切换使用指定数据库
     *
     * @param databaseName 数据库名
     */
    @DS("taos")
    @InterceptorIgnore(tenantLine = "true")
    void useDatabase(@Param("databaseName") String databaseName);

    /**
     * 根据传入的sql建表
     *
     * @param sql 建表sql
     */
    @DS("taos")
    @InterceptorIgnore(tenantLine = "true")
    void createTableBySql(@Param("sql") String sql);
}

注意:

  1. @DS 指定数据源为application-dev.yml中配置的TDengine的数据源taos
  2. @InterceptorIgnore(tenantLine = "true") 是忽略Mybatis-Plus 行级租户拦截器插件对SQL的处理。此处不设置忽略的话,在执行建库建表语句时,会抛出net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "create" "CREATE" 的异常。

DatabaseMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.taos.mapper.DatabaseMapper">

    <select id="showDatabaseList" resultType="java.util.Map">
        show databases
    </select>

    <update id="createDatabase">
        create database if not exists `${databaseName}`
    </update>

    <update id="useDatabase">
        use `${databaseName}`
    </update>
    <update id="createTableBySql">
        ${sql}
    </update>

</mapper>

4. 添加建表sql脚本

在这里插入图片描述
init.sql示例内容如下:

create table if not exists `demo_user`(
    `create_time` timestamp,
    `username` nchar(32),
    `gender` int,
    `phone` nchar(20),
    `login_ip` binary(32)
);

CREATE TABLE IF NOT EXISTS `alarm_device_data1` (
`ts` timestamp,
`id` BIGINT,
`project_unique_code` NCHAR(32),
`device_unique_code` NCHAR(32),
`alarm_type` NCHAR(10),
`alarm_record_num` NCHAR(32),
`alarm_desc` NCHAR(255),
`alarm_time` timestamp,
`alarm_threshold` NCHAR(32),
`outlier_value` NCHAR(32),
`numeric_unit` NCHAR(32),
`scene_data` NCHAR(255),
`del_flag` NCHAR(1),
`create_dept` BIGINT,
`create_by` BIGINT,
`create_time` timestamp,
`alarm_pictures` NCHAR(200),
`monitor_device_unique_code` NCHAR(32)
);

CREATE TABLE IF NOT EXISTS `bim_drawing1` (
`ts` timestamp,
`id` BIGINT,
`project_unique_code` NCHAR(32),
`bim_drawing_num` NCHAR(32),
`diagram_paper_id` NCHAR(30),
`bim_model_id` NCHAR(30),
`diagram_paper_name` NCHAR(64),
`del_flag` NCHAR(1),
`create_dept` BIGINT,
`create_by` BIGINT,
`create_time` timestamp,
`drawing_unique_code` NCHAR(32)
);

5. Controller

此处省略了service层封装

import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.domain.R;
import org.dromara.taos.mapper.DatabaseMapper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;


@RequiredArgsConstructor
@RestController
@RequestMapping("/taos/database")
public class TaosDatabaseController {

    private final DatabaseMapper databaseMapper;

    /**
     * 测试建库建表
     *
     * @return
     */
    @GetMapping("createDatabase")
    public R<Void> createDatabase(String databaseName) throws IOException {
        if (StringUtils.isBlank(databaseName)) {
            return R.fail("数据库名不能为空");
        }
        List<Map<String, Object>> list = databaseMapper.showDatabaseList();
        System.out.println("list-----:" + list);
        System.out.println("list.size-----:" + list.size());
        // 创建数据库
        databaseMapper.createDatabase(databaseName);
        // 切换到新建的数据库
        databaseMapper.useDatabase(databaseName);
        // 建表
        Resource resource1 = new ClassPathResource("/db/init.sql");
        String sqlText = IOUtils.toString(resource1.getInputStream(), StandardCharsets.UTF_8);
        Arrays.stream(sqlText.split(";")).filter(StringUtils::isNotBlank).forEach(sql -> {
            databaseMapper.createTableBySql(sql);
            System.out.println("sql-------" + sql);
        });

        System.out.println("sqlText-----:" + sqlText);

        return R.ok();
    }
}

本地postman接口测试需要在application.yml文件中设置接口忽略登录授权认证,配置在 security.excludes列表下。
在这里插入图片描述

测试效果

postman
在这里插入图片描述
TDengine中数据库以及表
在这里插入图片描述
ps:查看工具是 DBeaver 下载指定版本的 驱动即可连接访问 TDengine 时序数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AWS系列】巧用 G5g 畅游Android流媒体游戏

序言 Amazon EC2 G5g 实例由 AWS Graviton2 处理器提供支持&#xff0c;并配备 NVIDIA T4G Tensor Core GPU&#xff0c;可为 Android 游戏流媒体等图形工作负载提供 Amazon EC2 中最佳的性价比。它们是第一个具有 GPU 加速功能的基于 Arm 的实例。 借助 G5g 实例&#xff0c;游…

亚信安慧AntDB数据库:企业核心业务系统数据库升级改造的可靠之选

在近期召开的“2023年国有企业应用场景发布会”上&#xff0c;亚信安慧公司的核心数据库产品AntDB闪耀登场&#xff0c;技术总监北陌先生针对企业核心业务系统数据库升级改造的关键议题发表了深度分享。他从研发、工程实施和运维管理三个维度细致剖析了当前企业在进行数据库升级…

OpenCASCADE MFC例子

OpenCASCADE MFC例子 说明 一直对OpenCASCADE一直都比较感兴趣&#xff0c;这个例子是我参考这位大神C幼儿园中班小朋友的专栏做出来的OpenCASCADE_C幼儿园中班小朋友的博客-CSDN博客 不过我用的是vcpkg的方式安装OpenCASCADE&#xff0c;这个需要注意一下&#xff0c;可能需…

智慧机房建设浪潮:2024年动环监控系统厂家排名出炉

近几年来&#xff0c;伴随着信息化技术的快速发展&#xff0c;老旧的传统机房在设备性能、网络安全、数据统计等各方面都已经不再能完全满足使用需求&#xff0c;国内多个机房兴起了轰轰烈烈的智慧机房建设浪潮。不同于传统机房只能依赖人工24小时值守&#xff0c;智慧机房凭借…

数据库之存储引擎

1. 存储引擎的概念 存储引擎是MYSQL数据库的组件&#xff0c;负责执行时间的数据I/O操作&#xff08;数据的存储和提取&#xff09;&#xff0c;工作在文件系统之上&#xff0c;数据库的数据会先传到存储引擎&#xff0c;再按照存储引擎的存储格式保存到文件系统。 &#xff…

Spring学习 Spring IOC

创建工程&#xff1a; 2.1.程序的耦合 耦合&#xff1a;耦合指的就是对象之间的依赖关系。对象之间的耦合越高&#xff0c;维护成本越高。 案例&#xff1a;没有引入IOC容器时系统的Web层、业务层、持久层存在耦合 /*** 持久层实现类*/ public class UserDaoImpl implements U…

判断完全数-第11届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第27讲。 判断完全数&#…

如何理解Nacos的CP和AP架构模型?

Nacos是阿里巴巴开源的注册中心和配置中心&#xff0c;它既可以替应用服务管理服务相关的元数据&#xff0c;也可以管理服务相关的配置信息。 Nacos既支持单机部署&#xff0c;也支持集群部署&#xff0c;为了保证数据的一致性&#xff0c;在集群模式下&#xff0c;Nacos既支持…

CAD加密软件哪个好?CAD图纸加密软件哪个好(图纸加密软件哪个最好用)

图纸防泄密软件现在市场上是很多的&#xff0c;但是普遍采用的图纸防泄密软件技术是采用透明加密的技术&#xff0c;当企业采用透明加密技术对的图纸文件进行安全防护时&#xff0c;也是最安全的最稳定的技术。 现在常用的使用透明加密技术&#xff0c;对企业图纸防泄密的方法…

人工智能_机器学习092_使用三维瑞士卷数据_利用分层聚类算法进行瑞士卷数据三维聚类---人工智能工作笔记0132

然后我们使用分层聚类算法来对我们导入的瑞士卷数据进行聚类 agg =AgglomerativeClustering(n_clusters = 6,linkage = ward) 可以看到这里我们使用的,聚类距离计算用的是,ward这种,最小化簇内方差的形式,l进行聚类对吧 可以看到这个linkage参数有好几个选择对吧,是之前我们讲过…

复现PointNet(分割网络):Windows + PyTorch+代码

一、平台 Windows 10 GPU RTX 3090 CUDA 11.1 cudnn 8.9.6 Python 3.9 Torch 1.9.1cu111 所用的原始代码&#xff1a;https://github.com/fxia22/pointnet.pytorch​​​​​​​ 二、数据 shapenetcore_partanno_segmentation_benchmark_v0 三、代码 分享给有需要的…

【c语言】指针小结

一、指针是什么&#xff1f; 可以通过运算符&来取得变量实际保存的 起始地址 。 &#xff08;这个地址是虚拟地址&#xff0c;并不是真正物理内存上的地址。&#xff09; 数据类型 *标识符 &变量; int *pa &a; int *pa NULL; (NULL表示地址为0的内存空间&a…

金和OA JC6 ntko-upload 任意文件上传漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA JC6 ntko-upload接口处存在任意文件上传漏洞&#xff0c;攻击者可以通过构造特殊请求包上…

使用Go语言的HTTP客户端库进行API调用

随着微服务架构和RESTful API的普及&#xff0c;API调用成为了日常开发中的常见任务。Go语言提供了多种工具和库来帮助开发者轻松地与API进行交互。本文将介绍如何使用Go语言的HTTP客户端库进行API调用。 在Go语言中&#xff0c;标准库中的net/http包提供了基本的HTTP客户端功…

【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第3节-云产品流转配置

&#x1f31f;博主领域&#xff1a;嵌入式领域&人工智能&软件开发 本节目标&#xff1a;本节目标是进行云产品流转配置为后面实际的手机APP的接入做铺垫。云产品流转配置的目的是为了后面能够让后面实际做出来的手机APP可以控制STM32/MCU&#xff0c;STM32/MCU可以将数…

光明源@智慧厕所技术:优化生活,提升卫生舒适度

在当今数字科技飞速发展的时代&#xff0c;我们的日常生活正在经历一场革命&#xff0c;而这场革命的其中一个前沿领域就是智慧厕所技术。这项技术不仅仅是对传统卫生间的一次升级&#xff0c;更是对我们生活品质的全方位提升。从智能感应到数据分析&#xff0c;从环保设计到舒…

vmware中ubuntu虚拟机不能够用共享文件夹

有时候发现装好虚拟机后&#xff0c;然后 虚拟机-设置-选项-共享文件夹 然后使用快捷键ctrlaltt 打开命令行&#xff0c;cd /mnt下没有看到hgfs文件夹 解决办法是安装vmware tools工具 此时想通过点击 虚拟机-安装vmwaretools工具 按钮 居然发现该按钮是灰色的&#xff0…

Spring中的数据校验

文章目录 引言摘要正文基于 ValidationUtils的简单校验基于自定义 Validator的校验Spring内置校验 LocalValidatorFactoryBeanHibernateValidator校验使用HibernateValidator自定义校验规则 总结 引言 我们在日常的软件开发过程中&#xff0c;尤其是WEB开发过程中&#xff0c;…

vr眼镜和AR眼镜的区别有哪些?哪些产品可以支持VR应用?

vr眼镜怎么连接手机 要将VR眼镜连接到手机上&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 确保您的手机支持VR应用程序&#xff1a;首先&#xff0c;确保您的手机具备运行VR应用程序的硬件和软件条件。一些VR应用程序可能对设备有特定的要求&#xff0c;如处理器性能、操…

Dart调用JS对10000条定位数据滤波

使用Dart调用JS&#xff0c;还是为了练习跨语言调用&#xff1b; 一、编写对应的JS代码 平时在开发时不推荐将算法放在JS里&#xff0c;我这里是简单的做一下数据过滤&#xff1b; 首先生成一些随机定位数据&#xff0c;在实际开发中可以使用真实数据&#xff1b; // 随机定…