一、安装部署
1、我这里使用的 3.0.7.1版本,因为我看3.x版本已经发布了一年了,增加了很多新的功能,而且3.x官方推荐,对于2.x的版本,官网都已经推荐进行升级到3.x,所以考虑到项目以后的发展,决定使用3.x版本
2、下载安装包,我这里是linux安装,虽然在3.x版本已经可以支持window安装,但是为了考虑后面的性能测试,后期的部署,所以这里还是使用linux,这里安装步骤,官方说的已经很清楚了,就不再啰嗦了

3、安装完成后,会将对应的服务安装到系统服务中。我们直接通过 systemctl start xxx来处理即可,官网文档

4、启动成功后,我们查看服务状态,确实成功的之后

5、在我们的当前用户的bin目录下,有很多tdengine的可执行文件

二、远程链接
1、链接之后,链接的方式很多
2、连接器建立连接的方式,TDengine 提供两种:
- 通过 taosAdapter 组件提供的 REST API 建立与 taosd 的连接,这种连接方式下文中简称“REST 连接”
- 通过客户端驱动程序 taosc 直接与服务端程序 taosd 建立连接,这种连接方式下文中简称“原生连接”。
3、这里需要说明的一点就是,我们使用 REST 连接,那么在服务端 taosAdapter 的必须得启动,这个如果你不是docker启动,你得手动启动这个服务,不然你就无法使用 REST 连接
就我目前测试来看,只有docker的是创建完成后,会帮你启动 taosAdapter,其它window和linux是没有的,我们需要手动去启动
4、启动/停止 taosAdapter
在 Linux 系统上 taosAdapter 服务默认由 systemd 管理。使用命令 systemctl start taosadapter 可以启动 taosAdapter 服务。使用命令 systemctl stop taosadapter 可以停止 taosAdapter 服务。

2.1、使用DBeaver 链接
1、下载安装最新的DBeaver
2、点击左上角建立链接,然后选择 TDengine 即可

3、填写用户名和密码
注意这里可以看到使用工具链接是时,的URL是 TAOS-RS,说明我们的链接方式是 “REST 连接”,所以服务端 taosAdapter 的必须得启动.

4、这边的驱动链接版本是 3.2.1

5、链接成功
mp_test 和 bfh 数据库是我自己创建的

2.2、使用官网客户端 TDengineGUI 链接
1、tdengine 也有做客户端,用于展示,但是体验不太好

2、点击下载链接 https://github.com/arielyang/TDengineGUI/tags 下载zip ,解压安装即可

3、链接,方式参考dbeaver 即可
注意这里可以的URL是 TAOS-RS,说明我们的链接方式是 “REST 连接”,所以服务端 taosAdapter 的必须得启动.

三、springBoot 使用
1、以下的项目中的链接这里使用的都是 原生连接
通过客户端驱动程序 taosc 直接与服务端程序 taosd 建立连接,这种连接方式下文中简称“原生连接”。
2、你也可以使用 RS方式,但是那个方式效率要比原生的低30%
3、只需要把参数 url: jdbc:TAOS://192.168.172.129:6030/mp_test?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8 换成 "jdbc:TAOS-RS://192.168.172.129:6030/mp_test?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8";即可
3.1、使用JDBC的方式(prepareStatement)
1、不通过 dynamic-datasource-spring-boot-starter这个来完成多数据源的切换,就只是简单的配置数据源以及数据库连接池,这里不直接集成tdengine 到 mybatisPlus 的原因有两个
- 集成到 mybatisPlus 时需要多数据源,无论是使用dynamic-datasource的方案,还是自己去写,都需要去处理做逻辑代码,可能后期需要版本的维护就又要考虑这个维护
- 第二就是无论这个tdengine 如何发展,它一定会支持 jdbc 的方案并给出最新的demo,但是可能其它示例更具会很慢,甚至不会支持 mybatis 和 springBoot的其它版本
- 效率问题,官网的 JDBC 对于提升效率一节中说到,我们要批量插入,并给出了相关JDBC的示例,但是如果我们使用mybatisPlus ,可以就要取看下源码,mybatisPlus是否有做多余的操作,增加我们的业务工作量.
当然这只是我个人看法,所以,不愿意使用这个方案的,可以直接跳到 3.2节,使用
dynamic-datasource-spring-boot-starter来通过mybatiPlus 来管理多个数据源
3.1.1、项目配置及其代码
项目很简单,大家看下就明白了
1、整个项目结构

2、pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.14</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- mybatis plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- lombok插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!-- hutool工具 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
<!-- TDengine 依赖 -->
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.2.4</version>
</dependency>
<!--Druid 方便控制台查看-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
3、配置文件
# 项目端口
server:
port: 7280
servlet:
# 项目路径
context-path: /tadt
shutdown: graceful #开启优雅停机
spring:
application:
name: thermal-api-demonstration-tdengine
lifecycle:
timeout-per-shutdown-phase: 30s #设置缓冲时间 默认也是30s
# Mysql配置
datasource:
druid:
# 接下来(one,two)其实就都是自定义配置了,springBoot是识别不了的(当然你也可以另起其它行,到其它位置),我们需要将这些配置映射到对应的类上,springBoot不会帮我们做
one:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test01?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
name: mysqlDataSource # 在druid 内数据源的名称
# springboot2.0整合了hikari ,据说这是目前性能最好的java数据库连接池,但是 druid 有控制面板方便查看
# 手动配置数据源
validation-query: SELECT 1 FROM DUAL # 连接是否有效的查询语句
validation-query-timeout: 60000 # 连接是否有效的查询超时时间
# 建议 连接数 = ((核心数 * 2) + 有效磁盘数)
initial-size: 40 #初始化时建立物理连接的个数,初始化发生在显示调用 init 方法,或者第一次 getConnection 时
min-idle: 40 # 最小连接池数量
max-active: 100 #最大连接池数量
test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒
two:
driver-class-name: com.taosdata.jdbc.TSDBDriver
# 这里指定了具体的数据库 需要注意,
# 如果换成不指定具体数据库名称 jdbc:TAOS://192.168.172.129:6030?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8 则在sql中使用必须要指定数据库的名称 dba.table_b
url: jdbc:TAOS://192.168.172.129:6030/mp_test?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
username: root
password: taosdata
type: com.alibaba.druid.pool.DruidDataSource
name: tdengineDataSource # 在druid 内数据源的名称
# springboot2.0整合了hikari ,据说这是目前性能最好的java数据库连接池,但是 druid 有控制面板方便查看
# 手动配置数据源
validation-query: select server_status() # 连接是否有效的查询语句
validation-query-timeout: 60000 # 连接是否有效的查询超时时间
# 建议 连接数 = ((核心数 * 2) + 有效磁盘数)
initial-size: 10 #初始化时建立物理连接的个数,初始化发生在显示调用 init 方法,或者第一次 getConnection 时
min-idle: 10 # 最小连接池数量
max-active: 20 #最大连接池数量
test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒
# 热部署
devtools:
restart:
enabled: true
# jackson 配置
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
# 上传文件
servlet:
multipart:
max-file-size: 50MB
max-request-size: 50MB
logstash:
host: 192.168.172.228 # logstash部署的服务器IP
env: dev # 将日志加载到elk中项目的环境后缀名称-时间
# mybatis配置
mybatis-plus:
# xml文件路径
mapper-locations: classpath:mapper/*/*.xml
# 实体类路径
type-aliases-package: com.asurplus.*.entity
configuration:
# 驼峰转换
map-underscore-to-camel-case: true
# 是否开启缓存
cache-enabled: false
# 打印sql
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 全局配置
global-config:
# 数据库字段驼峰下划线转换
db-column-underline: true
# id自增类型(数据库id自增)
id-type: 0
4、DataSourceConfig
package cn.jt.thermalapidemonstrationtdengine.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import javax.servlet.Filter;
import javax.sql.DataSource;
/**
* @author GXM
* @version 1.0.0
* @Description TODO
* @createTime 2023年08月01日
*/
@Component
@Slf4j
public class DataSourceConfig {
public static final String MYSQL_DATA_SOURCE = "mysqlDataSource";
public static final String TDENGINE_DATA_SOURCE = "tdengineDataSource";
/**
* http://127.0.0.1:7280/tadt/druid
* 配置Druid的监控视图
*
* @return
*/
@Bean
public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean =
new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
// 配置Druid监控页面的登录用户名和密码
registrationBean.addInitParameter("loginUsername", "admin");
registrationBean.addInitParameter("loginPassword", "123456");
// 设置 IP 白名单,允许访问的 IP,多个 IP 用逗号分隔
registrationBean.addInitParameter("allow", "127.0.0.1");
// 设置 IP 黑名单,拒绝访问的 IP,多个 IP 用逗号分隔(当 IP 在黑名单中同时又在白名单中时,优先于白名单)
// servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
// 是否能够重置数据
registrationBean.addInitParameter("resetEnable", "false");
return registrationBean;
}
/**
* 配置Druid的WebStatFilter
*
* @return
*/
@Bean
public FilterRegistrationBean<Filter> druidWebStatFilter() {
FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new WebStatFilter());
// 添加过滤规则
registrationBean.addUrlPatterns("/*");
// 配置不拦截的路径
registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return registrationBean;
}
/**
* 自动配置的数据源,使用Druid连接池
* druid 会管理这数据源
*
* @return
*/
@Bean(name = MYSQL_DATA_SOURCE)
@Primary
@ConfigurationProperties(prefix = "spring.datasource.druid.one")
public DataSource dataSource() {
return new DruidDataSource();
}
/**
* 手动配置的数据源,也使用Druid连接池
* druid 会管理这数据源
* <p>
* 这里不直接集成tdengine 到 mybatisPlus 的原因有两个
* 1、集成到 mybatisPlus 时需要多数据源,无论是使用dynamic-datasource的方案,还是自己去写,都需要去处理做逻辑代码,可能后期需要版本的维护就又要考虑这个维护
* 2、就是无论这个tdengine 如何发展,它一定会支持 jdbc 的方案,但是可能不会支持 mybatis和 springBoot,
* 3、效率问题
*
* @return
*/
@Bean(name = TDENGINE_DATA_SOURCE)
@ConfigurationProperties(prefix = "spring.datasource.druid.two")
public DataSource customDataSource() {
return new DruidDataSource();
}
}
5、TdEngineController
package cn.jt.thermalapidemonstrationtdengine.controller;
import cn.jt.thermalapidemonstrationtdengine.service.TdEngineService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Timestamp;
/**
* @author GXM
* @version 1.0.0
* @Description TODO
* @createTime 2023年07月31日
*/
@Slf4j
@RestController
@RequestMapping("/td")
public class TdEngineController {
@Autowired
private TdEngineService tdEngineService;
@GetMapping("/mockOne")
public String mockOne() {
tdEngineService.insertOneByTime(new Timestamp(System.currentTimeMillis()));
return "ok";
}
@GetMapping("/mockMany")
public String mockMany() {
tdEngineService.mockMany();
return "ok";
}
}
6、TestController
package cn.jt.thermalapidemonstrationtdengine.controller;
import cn.hutool.core.util.RandomUtil;
import cn.jt.thermalapidemonstrationtdengine.entity.A;
import cn.jt.thermalapidemonstrationtdengine.service.AService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author GXM
* @version 1.0.0
* @Description TODO
* @createTime 2023年07月28日
*/
@Slf4j
@RestController
@RequestMapping("/test")
public

本文介绍了TDengine 3.x版本在Linux系统的安装部署,阐述了通过REST和原生两种方式远程连接TDengine的方法,包括使用DBeaver和TDengineGUI。还讲解了Spring Boot使用TDengine的两种方式,一是JDBC方式,二是用mybatisPlus和dynamic-datasource-spring-boot-starter管理,并给出项目配置和代码示例。
最低0.47元/天 解锁文章
1367





