Springboot整合taos时序数据库TDengine

本文详细介绍了TDengine数据库在Linux服务器上的安装,包括版本匹配、Windows客户端的安装和配置,强调了版本一致性、DLL文件的位置、防火墙设置以及配置文件的重要性。同时,提到了在Druid数据源中遇到的问题,如不支持dual表校验,并给出了相应的解决方案。此外,还分享了一个整合的Spring Boot数据源配置示例,以及推荐了一个TDengine的GUI管理工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先安装TDengine服务端在linux上

TDengine多种安装包的安装和卸载 - TDengine | 涛思数据安装过程直接去官网看,非常详细简单

2.出现的问题 windows连接  invalid app version 版本不对应   

版本不对应的问题,需要在linux上安装的版本和windows client版本一致,不然windows无法连接服务端

3.windows client 安装的时候必须要用管理员模式下安装这样   在  c://windows//system32/taos.dll  才会有这个文件,而且安装好了taos程序会在  c://TDengine下

如果 c://windows//system32/taos.dll 没有这个文件,可将c://TDengine下conf的taos.dll复制到 c://windows//system32/下

以下是官方原话

java.lang.UnsatisfiedLinkError: no taos in java.library.path

原因:程序没有找到依赖的本地函数库 taos。

解决方法:windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,linux 下将建立如下软链 ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so 即可。

java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform

原因:目前 TDengine 只支持 64 位 JDK。

解决方法:重新安装 64 位 JDK。

这个里面是函数,是连接linux服务器上的taos服务的关键  ,如果没有那个文件会报错无法连接!!!!

4.linux上安装好了taos进行测试   默认端口6030 而且还需要配置一个域名!!!!

5.windows的host上配置一个  ip   域名   是连接linux上的taos用到的,如果没有配置是连接不上的!!!切记很重要

6.数据源用了druid阿里的,做了ValidationQuery 伪表dual校验  但是目前好像TDengine不支持这个,会提示报错  dual  table  not  exit

7.传时间类型到数据库切记用时间戳传,如果直接传Date时间不准确,传时间的毫秒数

搭建好后下载GUI界面可视化

下载地址

GitHub - skye0207/TDengineGUI: A simple TDengine DeskTop Manager

TDengineGUI: TDengineGUI是一个基于electron构建的,针对时序数据库TDengine的图形化管理工具。具有跨平台、易于使用、版本适应性强等特点。

可以通过“新建连接”按钮,添加新的服务器进行管理。需要提供数据库服务器的ip地址、restful服务的端口号(默认为6041)注意这里不是6030端口了,用的是restful端口6041、连接服务器的用户名和密码(默认为root:taosdata)

注意数据保存在

保留配置文件
/etc/taos/taos.cfg 
数据库文件
/var/lib/taos
日志文件
/var/log/taos
配置文件目录:/etc/taos/taos.cfg, 软链接到/usr/local/taos/cfg/taos.cfg;
数据库目录:/var/lib/taos, 软链接到/usr/local/taos/data;
日志目录:/var/log/taos, 软链接到/usr/local/taos/log;

github上有一个taos数据库常见问题的汇总

Issues · taosdata/TDengine · GitHub

如果报错

在druid的配置文件properties里 

去掉wall防火墙 ,去掉wall

最后附上整合的demo

配置数据源


taos:
  datasource:
##不用restful则用这个driver类: com.taosdata.jdbc.TSDBDriver
##用restful风格则用:com.taosdata.jdbc.rs.RestfulDriver类
    driver-class-name: com.taosdata.jdbc.TSDBDriver
##用restful的话则用jdbc:TAOS-RS,6041端口默认是reftful
    url: jdbc:TAOS://xxx.xxx.x.xx:6030/db?timezone=Asia/Beijing&charset=UTF-8
    username: root
    password: taosdata

 pom

<!--如果不想下载client连接server那么用这个版本然后用restful风格连接-->
 <!--连接taos数据库使用-->
        <!--server端和client端2.1.1.0版本,这里jar包用2.0.12版本稳定-->
        <dependency>
            <groupId>com.taosdata.jdbc</groupId>
            <artifactId>taos-jdbcdriver</artifactId>
            <version>2.0.24</version>
        </dependency>

 数据源配置


@Configuration
@MapperScan(basePackages = TaosDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "taosSqlSessionFactory")
public class TaosDataSourceConfig {
    static final String PACKAGE = "com.xxxx";
    private static final String TYPE_ALIASES_PACKAGE = "com.xxxx";
    private static final String MAPPER_LOCATIONS = "classpath:mapper/*.xml";

    @Value("${taos.datasource.url}")
    private String dbUrl;

    @Value("${taos.datasource.username}")
    private String username;

    @Value("${taos.datasource.password}")
    private String password;

    @Value("${taos.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.druid.initial-size}")
    private int initialSize;

    @Value("${spring.datasource.druid.min-idle}")
    private int minIdle;

    @Value("${spring.datasource.druid.max-active}")
    private int maxActive;

    @Value("${spring.datasource.druid.max-wait}")
    private int maxWait;

    @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
    private int timeBetweenEvictionRunsMillis;

    @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
    private int minEvictableIdleTimeMillis;

    @Value("${spring.datasource.druid.validation-query}")
    private String validationQuery;

    @Value("${spring.datasource.druid.test-while-idle}")
    private boolean testWhileIdle;

    @Value("${spring.datasource.druid.test-on-borrow}")
    private boolean testOnBorrow;

    @Value("${spring.datasource.druid.test-on-return}")
    private boolean testOnReturn;

    @Value("${spring.datasource.druid.pool-prepared-statements}")
    private boolean poolPreparedStatements;

    @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
    private int maxPoolPreparedStatementPerConnectionSize;

    @Value("${spring.datasource.druid.filters}")
    private String filters;

    @Bean(name = "taosDataSource")
    @ConfigurationProperties(prefix = "taos.datasource")
    public DataSource taosDataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setName("taosDataSource");
        datasource.setUrl(this.dbUrl);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);

        // configuration
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        //不用伪表dual校验登录信息,貌似TDengine不支持
       // datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        datasource.setPoolPreparedStatements(poolPreparedStatements);
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
        List<Filter> filterList = new ArrayList<>();
        filterList.add(wallFilter());
        datasource.setProxyFilters(filterList);
        try {
            datasource.setFilters(filters);
        } catch (SQLException e) {

        }
        return datasource;
    }

    @Bean
    public WallFilter wallFilter() {
        WallFilter wallFilter = new WallFilter();
        wallFilter.setConfig(wallConfig());
        return wallFilter;
    }

    @Bean
    public WallConfig wallConfig() {
        WallConfig config = new WallConfig();
        //允许一次执行多条语句
        config.setMultiStatementAllow(true);
        //允许非基本语句的其他语句
        config.setNoneBaseStatementAllow(true);

        return config;
    }

    @Bean(name = "taosTransactionManager")
    public DataSourceTransactionManager taosTransactionManager() {
        return new DataSourceTransactionManager(taosDataSource());
    }

    @Bean(name = "taosJdbcTemplate")
    public JdbcTemplate taosJdbcTemplate() {
        return new JdbcTemplate(taosDataSource());
    }

    @Bean(name = "taosSqlSessionFactory")
    public SqlSessionFactory taosSqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(taosDataSource());
        //解决jar包找不到mapperTYPE_ALIASES_PACKAGE问题
        sessionFactory.setVfs(SpringBootVFS.class);
         sessionFactory.setTypeAliasesPackage(TYPE_ALIASES_PACKAGE);
         sessionFactory.setMapperLocations(new         
        PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATIONS));
 
        return sessionFactory.getObject();
    }
}

最后一个test类测试

  @Resource(name = "taosJdbcTemplate")
    private JdbcTemplate jdbcTemplate;
    @Test
    public void testToas() throws Exception {
        int num = jdbcTemplate.update(
                "insert into tb(temperature, ts, humidity) VALUES(?,?,?)",
                "35",new Date().getTime(), "123000123"
        );

### TDengine 时序数据库使用指南、特性、配置与示例 TDengine 是一款专为时序数据设计的高性能数据库,充分利用了时序数据的特点,提出了一些独特的概念和架构设计。以下将详细介绍 TDengine 的特性、配置方法以及使用示例。 #### 特性 TDengine 提出了“一个数据采集点一张表”与“超级表”的概念[^1],这种设计极大地提升了数据写入、查询和存储的效率。此外,TDengine 支持多种平台部署,包括 Linux、Windows 和 MacOS,并且可以独立运行或与其他数据库和应用集成使用[^2]。以下是其主要特性: - **高性能**:通过创新的存储引擎设计,TDengine 能够实现极高的写入和查询速度。 - **高效压缩**:针对时序数据特点优化的压缩算法显著减少了存储空间需求。 - **支持 SQL**:兼容标准 SQL 语法,便于用户快速上手。 - **云原生**:支持容器化部署和弹性扩展,适合现代云环境。 - **多场景适用**:适用于智能工厂监测、车辆行驶轨迹分析、IT 基础设施监控等多种场景。 #### 配置方法 在开发、测试和生产环境中,创建 TDengine 数据库需要根据具体需求调整参数配置。例如,在生产环境中可能需要更高的可用性和容错能力,而在开发环境中则更注重灵活性和易用性[^3]。以下是一些关键配置项: - **replica**:设置副本数量以保证数据可靠性。 - **daysToKeep**:定义数据保留天数,超出该时间的数据会被自动删除。 - **blocksPerFile**:控制每个文件中的数据块数量,影响性能和资源使用。 配置可以通过修改 `taos.cfg` 文件完成,或者在创建数据库时直接指定参数。例如: ```sql CREATE DATABASE db_name DAYS 365 REPLICAS 2 BLOCKS 10; ``` #### 使用示例 以下是一个简单的使用示例,展示如何创建超级表、插入数据并进行查询。 1. **创建普通表和超级表**: ```sql CREATE TABLE meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT); CREATE TABLE t1 USING meters TAGS('group1', 'beijing'); ``` 2. **插入数据**: ```sql INSERT INTO t1 VALUES ('2023-01-01 00:00:00', 12.3, 220, 0.3); ``` 3. **查询数据**: ```sql SELECT * FROM meters WHERE current > 10; ``` 结合 GoFrame 开发框架,可以进一步简化开发流程[^4]。例如,使用 GoFrame 的 ORM 功能管理超级表和连接池,能够显著提高开发效率。 #### 注意事项 为了正确理解并使用 TDengine,建议仔细阅读官方文档中关于数据模型的部分。这有助于更好地设计数据结构和优化查询性能。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值