TDengine 基于SpringBoot 框架和Druid 连接池的TDengine Demo示例

news2024/11/24 20:38:50

一、前文

TDengine 入门教程——导读

二、JDBC Demo下载

TDengine 官方提供的示例程序源码位于TDengine / TDengine 的 TDengine/examples/JDBC下:

  • JDBCDemo:JDBC 最简单的demo。
  • connectionPools:HikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。
  • SpringJdbcTemplate:Spring JdbcTemplate 中使用 taos-jdbcdriver。
  • mybatisplus-demo:Mybatis 中使用 taos-jdbcdriver。
  • springbootdemo:Springboot 中使用 taos-jdbcdriver。

三、最简单的Demo 浅析

  • pom.xml添加依赖
    <dependencies>
        <dependency>
            <groupId>com.taosdata.jdbc</groupId>
            <artifactId>taos-jdbcdriver</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
  • 通过urlproperties连接数据库
  • 执行SQL语句
    • drop database if exists test:如果test数据库存在,则删除test数据库
    • create database if not exists test:如果test数据库不存在,则新建test数据库
    • use test:切换到test数据库
    • create table test.weather(ts timestamp, temperature float) tags(location nchar(64)):创建weather表
    • insert into t2 using test.weather tags('厦门') values(now, 17.2):往t2子表插入数据
    • select * from t2:查询t2子表
  • 关闭连接
public class JdbcRestfulDemo {
    private static final String host = "localhost";
    private static final String dbname = "test";
    private static final String user = "root";
    private static final String password = "taosdata";

    public static void main(String[] args) {
        try {
            String url = "jdbc:TAOS-RS://" + host + ":6041/?user=" + user + "&password=" + password;

            Properties properties = new Properties();
            properties.setProperty("charset", "UTF-8");
            properties.setProperty("locale", "en_US.UTF-8");
            properties.setProperty("timezone", "UTC-8");

            Connection conn = DriverManager.getConnection(url, properties);
            Statement stmt = conn.createStatement();

            stmt.execute("drop database if exists " + dbname);
            stmt.execute("create database if not exists " + dbname);
            stmt.execute("use " + dbname);
            stmt.execute("create table " + dbname + ".weather(ts timestamp, temperature float) tags(location nchar(64))");
            stmt.executeUpdate("insert into t2 using " + dbname + ".weather tags('厦门') values(now, 17.2)");
//            ResultSet rs = stmt.executeQuery("select * from " + dbname + ".weather");
//            ResultSet rs = stmt.executeQuery("select temperature,location from t2");
            ResultSet rs = stmt.executeQuery("select * from t2");
            ResultSetMetaData meta = rs.getMetaData();
            while (rs.next()) {
                for (int i = 1; i <= meta.getColumnCount(); i++) {
                    System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
                }
                System.out.println();
            }

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

  • IDEA启动配置
    在这里插入图片描述
  • 打印输出
    在这里插入图片描述

五、数据库连接池

最简单的JDBC demo已经能实现基本功能,但是细节上并不完善。

因为其每次执行数据库读写,都需要打开和关闭数据库连接。一旦短时间内有成千上万请求,就会:

  • 浪费大量的网络时间;
  • 大量的数据库连接,加重数据库的负载;
  • 临时对象较多,内存无法及时释放,不必要的系统开销;

所以,常见的数据库操作通常都会用到数据库连接池,常见的数据库连接池有哪些:

  • proxool:性能不错,稳定性稍差,并发较高的情况下会出错;
  • dbcp:apache上的一个 java 连接池项目,也是 tomcat 使用的连接池组件;
  • druid:alibba出品,功能比较全面,且扩展性较好的数据库连接池,比较方便对jdbc接口进行监控跟踪等;
  • HikariCP:性能强劲,稳定性也不差。目前被SpringBoot2官方推荐使用的数据库连接池;

就性能而言,HikariCP最强,但是我们选择druid,因为druid最为全面,没有短板。

四、基于SpringBoot的Demo浅析

除了需要Druid连接池之外,我们还需要Mybatis持久层框架。

4.1 pom依赖

       <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.1.1</version>
       </dependency>
       <dependency>
           <groupId>com.taosdata.jdbc</groupId>
           <artifactId>taos-jdbcdriver</artifactId>
           <version>3.0.0</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid-spring-boot-starter</artifactId>
           <version>1.1.17</version>
       </dependency>

4.2 properties配置

# datasource config
spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver
spring.datasource.url=jdbc:TAOS://127.0.0.1:6030/test
spring.datasource.username=root
spring.datasource.password=taosdata

spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=5
# max wait time for get connection, ms
spring.datasource.druid.max-wait=60000

spring.datasource.druid.validation-query=select server_status();
spring.datasource.druid.validation-query-timeout=5000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=600000
spring.datasource.druid.max-evictable-idle-time-millis=900000

# mybatis
mybatis.mapper-locations=classpath:mapper/*.xml

# log 
logging.level.com.taosdata.jdbc.springbootdemo.dao=debug

4.3 框架浅析

  • Controller控制层,负责请求和响应控制。
  • Service服务层,负责业务逻辑代码的处理。
  • Dao持久层,负责数据库的增删改查。

Controller控制层

Service服务层

Dao持久层

所以,如下图,简而言之:

  • 功能逻辑代码主要在WeatherService.java
  • TDengine数据库的SQL操作主要在WeatherMapper.xml

在这里插入图片描述

4.4 运行调试

  • application.properties配置文件修改ok后,即可运行启动。

  • 通过ApiPost6工具请求接口

  • init接口,初始化数据库,随机插入20条数据
    在这里插入图片描述

  • count接口,查询当前数据库有多少条数据
    在这里插入图片描述

  • save接口,数据库数据写入。
    在这里插入图片描述

以此接口为例,浅谈程序源码
WeatherController.java

    @PostMapping("/{temperature}/{humidity}")
    public int saveWeather(@PathVariable float temperature, @PathVariable float humidity) {
        return weatherService.save(temperature, humidity);
    }

WeatherService.java

    public int save(float temperature, float humidity) {
        Weather weather = new Weather();
        weather.setTs(new Timestamp(new Date().getTime()));
        weather.setTemperature(temperature);
        weather.setHumidity(humidity);
        weather.setLocation("厦门");
        weather.setNote("save测试");
        weather.setGroupId(30);

        weatherMapper.createTable(weather);
        return weatherMapper.insert(weather);
    }

WeatherMapper.xml

    <insert id="insert" parameterType="com.taosdata.example.springbootdemo.domain.Weather">
        insert into test.t#{groupId} (ts, temperature, humidity, note)
        values (#{ts}, ${temperature}, ${humidity}, #{note})
    </insert>
  • lastOne接口,数据库数据查询

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【刷题之路Ⅱ】迷宫问题升级版——找最短路径

【刷题之路Ⅱ】迷宫问题升级版——找最短路径 一、题目描述二、解题1、方法1——暴力递归更新栈1.1、思路分析1.2、先将栈实现以下1.3、代码实现 一、题目描述 原题连接&#xff1a; 地下迷宫 题目描述&#xff1a; 小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅…

C语言深度解析--操作符

目录 操作符 1.算数操作符 2.移位操作符 左移操作符<<&#xff1a; 右移操作符>>&#xff1a; 3.位操作符 按位与&&#xff1a; 按位或 | &#xff1a; 按位异或 ^ &#xff1a; 4.赋值操作符 5.单目操作符 6.关系操作符 7.逻辑操作符 8.条件操作…

这所985复试竟可直接加50分,若复试有科研经历!

本期为大家整理热门院校-“大连理工大学”的择校分析&#xff0c;这个择校分析专题会为大家结合&#xff1a;初试复试占比、复试录取规则&#xff08;是否公平&#xff09;、往年录取录取名单、招生人数、分数线、专业课难度等进行分析。希望能够帮到大家! –所有数据来源于研…

vue:实现简单的拖拽功能

背景 平常做业务很容易遇到拖拽功能&#xff0c;没做之前总觉得会很复杂&#xff0c;今天来看一下到底是怎么实现的。 拖拽API 这是 HTML5 新增的 API&#xff0c;当给元素设置 draggable"true" 的时候&#xff0c;这个元素就可以拖拽了。 <div draggable&quo…

JavaScript全解析——Express框架介绍与入门

本文为千锋资深前端教学老师带来的【JavaScript全解析】系列&#xff0c;文章内含丰富的代码案例及配图&#xff0c;从0到1讲解JavaScript相关知识点&#xff0c;致力于教会每一个人学会JS&#xff01; 文末有本文重点总结&#xff0c;可以收藏慢慢看~ 更多技术类内容&#xf…

Linux 安装nodejs、npm、yarn、nrm(超实用)

前言&#xff1a;初衷想要本地通过dockerfile文件直接把项目打包到linux服务器&#xff0c;不用再本地加载再上传等&#xff0c;后续再贴上配置文件 一、什么是nodejs 来自官网的介绍&#xff0c;Node.js 是一个开源的跨平台 JavaScript 运行时环境。它几乎是任何类型项目的流…

AI加持,Fabric让Power BI生态更强大

在Microsoft Build 2023上微软正式推出了Microsoft Faric预览版&#xff0c;它将Power BI、Azure Synapse、Azure Data Factory的优点整合到了一个统一的SasS服务中。数据工程师、数仓工程师、数据科学家、数据分析师和业务用户可以在Fabric中无缝协作&#xff08;微软这是要卷…

MinIO:基于Go实现的高性能、兼容S3协议的对象存储

High Performance Object Storage for AI 译文&#xff1a;MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储 文档 项目地址&#xff1a;https://github.com/minio/minio官网地址&#xff1a;https://min.io/文档地址&#xff1a;https://docs.min.io/Software Developme…

PyTorch-优化器以及网络模型的修改

目的&#xff1a;优化器可以将神经网络中的参数根据损失函数和反向传播来进行优化&#xff0c;以得到最佳的参数值&#xff0c;让模型预测的更准确。 1. SGD import torch import torchvision from torch import nn from torch.nn import Sequential, Conv2d, MaxPool2d, Flat…

Spring Security 笔记

在Spring Security 5.7.0-M2&#xff0c;我们弃用了 WebSecurityConfigurerAdapter &#xff0c;因为我们鼓励用户转向使用基于组件的安全配置。 为了帮助大家熟悉这种新的配置风格&#xff0c;我们编制了一份常见用例表和推荐的新写法。 配置HttpSecurity Configuration pu…

重磅发布!面向装备制造业服务化转型白皮书

《面向装备制造业服务化转型白皮书》 关于白皮书 《面向装备制造业服务化转型白皮书》通过调研160余家装备制造企业的服务化路径及模式&#xff0c;研讨支持企业开展服务型制造的系统化方案&#xff0c;希望为装备制造业服务化转型&#xff0c;探索切实有效的路径以供参考。 …

Web 自动化测试案例——关闭某视频网站弹出广告以及打开登录框输入内容

文章目录 &#x1f4cb;前言&#x1f3af;自动化测试&#x1f9e9;环境的搭建 &#x1f3af;案例介绍&#x1f4dd;最后 &#x1f4cb;前言 人生苦短&#xff0c;我用Python。许久没写博客了&#xff0c;今天又是久违的参与话题的讨论&#xff0c;话题的内容是&#xff1a;如何…

4.文件系统

组成 Linux&#xff1a;一切皆文件 索引节点&#xff08;I-node&#xff09; I-node&#xff08;Index Node&#xff09;&#xff1a;文件系统的内部数据结构&#xff0c;用于管理文件的元数据和数据块。 文件的元数据&#xff1a;包括文件的权限、拥有者、大小、时间戳、索引…

VM增加磁盘并挂载到根目录

1、虚拟机增加磁盘 首先要关闭虚拟机&#xff0c;否则增加按钮不可见。 9 vm添加磁盘完毕。 2、登录虚拟机挂盘 1、lsblk查看硬盘挂载情况&#xff0c;sdb为新挂载的磁盘。 [rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda …

通过python封装接口采集1688店铺所有商品数据接口,1688店铺所有商品接口,1688API接口

采集1688店铺所有商品数据需要进行以下步骤&#xff1a; 获取店铺ID 要获取店铺ID&#xff0c;您可以通过访问店铺首页来获取&#xff0c;例如&#xff1a;https://1688455341.1688.com/ 店铺ID就是链接中的“1688455341”。 获取店铺所有商品列表页 通过向1688店铺的搜索…

关于【SD-WEBUI】的LoRA模型训练:怎样才算训练好了?

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;模型(LoRA)训练&#xff08;1.1&#xff09;数据准备&#xff08;1.1.1&#xff09;筛选照片&#xff08;1.1.2&#xff09;预处理照片&#xff08;1.1.3&#xff09;提示词(tags)处理&#xff08;1.1.4&…

部署微信小程序-shopro

部署微信小程序 开始之前 注意不要运行模式下的代码提交小程序审核&#xff0c;第一包体积太大&#xff0c;第二性能太差请下载 小程序开发工具正式小程序无法正常使用&#xff0c;而开发版正常&#xff0c;请确保域名都添加到小程序后台&#xff0c;并且配置好了 IP 白名单&a…

Openai+Deeplearning.AI: ChatGPT Prompt Engineering(五)

想和大家分享一下最近学习的Deeplearning.AI和openai联合打造ChatGPT Prompt Engineering在线课程.以下是我写的关于该课程的前四篇博客&#xff1a; ChatGPT Prompt Engineering(一)ChatGPT Prompt Engineering(二)ChatGPT Prompt Engineering(三)ChatGPT Prompt Engineering…

微星笔记本618大促至高直降5000元,泰坦GP78 HX爆款配置10999拿下

在万众玩家的期待下&#xff0c;微星笔记本618大促如约而至&#xff01;不仅覆盖今年全新13代酷睿HX RTX40系显卡的高能游戏本&#xff0c;还特别在618同步推出新品&#xff1a;泰坦GP78 HX&#xff0c;承袭“泰坦系列”旗舰的满血基因极致性能体验外&#xff0c;更有i9-13980…

自学web前端能找到工作吗?是否有必要参加前端培训?

是的&#xff0c;自学前端可以帮助您找到工作&#xff0c;参加培训是根据个人学习能力和经济实力来自己决定的。前端开发是一个相对容易入门的领域&#xff0c;并且许多人通过自学成功地找到了前端开发的工作。以下是好程序员的一些建议&#xff0c;可以帮助您在自学前端时提高…