【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 mapperPUBLIC "-//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 时序数据库。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm杂志在线阅读网站论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装杂志在线阅读网站软件来发挥其高效地信息处理的作用&#x…

Linux ssh 实现远程免密登录

一、背景 我搭建了一个 zookeeper 集群&#xff0c;写了一个 shell 脚本来控制集群的启动和关闭&#xff0c;但是我发现每次我执行 shell 脚本的时候&#xff0c;都需要我输入各个服务器的密码才可以运行&#xff0c;感觉很麻烦。shell 脚本里面连接其他服务器用的就是 ssh 的方…

C#之反编译之路(一)

本文将介绍微软反编译神器dnSpy的使用方法 c#反编译之路(一) dnSpy.exe区分64位和32位,所以32位的程序,就用32位的反编译工具打开,64位的程序,就用64位的反编译工具打开(个人觉得32位的程序偏多,如果不知道是32位还是64位,就先用32位的打开试试) 目前只接触到wpf和winform的桌…

shell 获取主机IP 脚本中使用IP 打印出来IP

目录 查看ip查看网关只查看ens33过滤ip拿到网卡名字对内容进行切片获取第一网卡IP &#xff08;head -1 表示第一个网卡&#xff09;脚本中打印IP 查看ip ip a 查看网关 ip r只查看ens33 ip a show dev ens33过滤ip ip a | grep -oE [0-9]\.[0-9]\.[0-9]\.[0-9] 拿到网卡名…

Vue 之 修饰符汇总

一、简介 在Vue中&#xff0c;修饰符是一种特殊的语法&#xff0c;用于修改指令或事件绑定的行为&#xff0c;它们以点号&#xff08;.&#xff09;的形式添加到指令或事件的后面&#xff0c;并可以改变其默认行为或添加额外的功能&#xff0c;如&#xff1a;禁止事件冒泡、数…

Android 13.0 SystemUI状态栏居中显示时间和修改时间显示样式

1.概述 在13.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了 效果图如下: 2.SystemUI状态栏居中显…

国产高分七号光学影像产品预处理步骤

1.引言 高分七号卫星采用主被动光学复合测绘新体制&#xff0c;星上搭载了双线阵相机、激光测高仪等有效载荷&#xff0c;其中双线阵相机可有效获取20公里幅宽、优于0.8m&#xff08;后视&#xff1a;0.65m;前视&#xff1a;0.8m&#xff09;分辨率的全色立体影像和2.6m分辨率的…

MobaXterm SSH 免密登录配置

文章目录 1.简介2.SSH 免密登录配置第一步&#xff1a;点击 Session第二步&#xff1a;选择 SSH第三步&#xff1a;输入服务器地址与用户名第四步&#xff1a;设置会话名称第五步&#xff1a;点击 OK 并输入密码 3.密码管理4.小结参考文献 1.简介 MobaXterm 是一个功能强大的终…

React学习:状态(State) 和 属性(Props)

props 是组件对外的接口&#xff0c;state 是组件对内的接口。组件内可以引用其他组件&#xff0c;组件之间的引用形成了一个树状结构&#xff08;组件树&#xff09;&#xff0c;如果下层组件需要使用上层组件的数据或方法&#xff0c;上层组件就可以通过下层组件的props属性进…

[C#]利用opencvsharp实现深度学习caffe模型人脸检测

【官方框架地址】 https://github.com/opencv/opencv/blob/master/samples/dnn/face_detector/deploy.prototxt 采用的是官方caffe模型res10_300x300_ssd_iter_140000.caffemodel进行人脸检测 【算法原理】 使用caffe-ssd目标检测框架训练的caffe模型进行深度学习模型检测 …

uniapp获取手机当前信息及应用版本

appVersion 是app端查询的数据信息 appWgtVersion 是浏览器端查询的数据信息 onLoad() {const systemInfo uni.getSystemInfoSync();console.log(systemInfo);// #ifdef H5const uniAppVersion systemInfo.appVersion;// #endif// #ifndef H5const uniAppVersion systemIn…

20240105移远的4G模块EC20在Ubuntu 20.04.6 LTS下使用联通5G卡上网的步骤

20240105移远的4G模块EC20在Ubuntu 20.04.6 LTS下使用联通5G卡上网的步骤 2024/1/5 10:11 缘起&#xff1a;需要在Firefly的AIO-3399J开发板上调试移远的4G模块EC20&#xff08;Android10/11/12&#xff09;&#xff0c;需要现在先测试EC20的好坏&#xff01; 陶老板告诉我找一…