当前位置: 首页 > news >正文

springCloud集成tdengine(原生和mapper方式) 其一

第一种 mapper方式,原生方式在主页看第二章
一、添加pom文件

		<!-- HikariCP 连接池 -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>
        <!-- TDengine 连接器-->
        <dependency>
            <groupId>com.taosdata.jdbc</groupId>
            <artifactId>taos-jdbcdriver</artifactId>
            <version>3.5.3</version>
        </dependency>

二、在nacos中配置好数据库连接

spring:
  datasource:
    url: jdbc:TAOS://localhost:6030/test
    username: root
    password: yourPassWord
    driver-class-name: com.taosdata.jdbc.TSDBDriver
    hikari:
      maximum-pool-size: 10 # 连接池最大连接数
      minimum-idle: 2       # 连接池最小空闲连接数
      idle-timeout: 30000   # 空闲连接超时时间(毫秒)
      max-lifetime: 1800000 # 连接最大存活时间(毫秒)
      connection-timeout: 30000 # 连接超时时间(毫秒)

其中test是你的database,填好你的username和password
三、如果需要,配置好配置类


import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * 如果多数据源, 可以放开这边的config代码
 */
@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return new HikariDataSource();
    }

}

四、写好model类


import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class DeviceModel implements Serializable {

    // 时间 == 必须
    private Date createTime;
    // 设备名字/设备id
    private String deviceId;
    // 标签值
    private String ip;
    // 值
    private Object value;
    // 类型  
    private String valueType;
    //采集状态 
    private int status;
    // 设备名称
    private String deviceName;
    // 设备parentName
    private String deviceParentName;
    
    // int类型的value值
    private Integer intValue;
    // 布尔类型的value值
    private Boolean booleanValue;
    // 小数类型的value值
    private Float floatValue;
    private Date ts;

}

五、写好mapper接口

import com.apex.iot.device.model.DeviceModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface DeviceMapper {

    /**
     * 根据deviceId获取设备最新的值,注意,只返回一个值
     * @param deviceId 要查询的设备id
     */
    @Select("select ts,int_value as intValue,boolean_value as booleanValue,float_value as floatValue,status,device_id as deviceId,device_name as deviceName,device_parent_name as deviceParentName,ip from device_data_super_table where device_id = #{deviceId} order by ts desc limit 1")
    DeviceModel getDeviceNewMsgByDeviceId(@Param("deviceId") String deviceId );

    @Insert({
            "<script>",
            "INSERT INTO ",
            "<foreach collection='deviceList' item='data' separator=','>",
            "#{data.deviceId} using #{superTable} tags(#{data.deviceId},#{data.deviceName},#{data.deviceParentName},#{data.ip}) values(",
            "#{data.createTime},#{data.intValue},#{data.booleanValue},#{data.floatValue},#{data.status}) ",
            "</foreach>",
            "</script>"
    })
    int insertDeviceList(@Param("deviceList")List<DeviceModel> deviceList,@Param("superTable") String superTable);


}

六、写service


/**
 * 数据处理service
 */
@Service
@Slf4j
public class DeviceService {

	 //TDengine中的superTable的名字
    private static final String superTable = "super_table";
    
    public void saveToTDengineNew(List<DeviceModel> deviceList){
        this.deviceMapper.insertDeviceList(deviceList,superTable);
    }
    public DeviceModel getDeviceMsgByTDengine(String deviceId) throws Exception {
    	return deviceMapper.getDeviceNewMsgByDeviceId(deviceId);
    }

}

七、处理controller即可。完成。

下班啦,原生方式改天写

相关文章:

  • Springboot之RequestAttributes学习笔记
  • 使用selenium来获取数据集
  • 在Ubuntu 22.04 中安装Docker的详细指南
  • elasticsearch 通用笔记
  • windows 安装 Elasticsearch
  • 六、GPIO中断控制器(1)—— pcf8575
  • CSRF跨站请求伪造(Cross - Site Request Forgery)
  • 蓝桥杯 劲舞团
  • 简要分析IPPROTO_TCP参数
  • 解决Selenium滑动页面到指定元素,点击失效的问题
  • Swagger2 使用教程
  • 为什么 Redis 选择单线程模型?
  • 【3-22 list 详解STL C++ 】
  • RAG知识库的数据方案:图数据库、向量数据库和知识图谱怎么选?
  • React Native进阶(六十):webview实现屏蔽所嵌套web页面异常弹窗
  • 数据通信与计算机网络——网络模型
  • AI 代理错误的复合效应
  • 如何在MySQL中创建定时任务?
  • Web3网络生态中数据保护合规性分析
  • Redis主从复制实验
  • 贵州省总工会党组成员、副主席梁伟接受审查调查
  • 第四轮伊美核谈判将于11日在阿曼举行
  • 中铁房地产24.7亿元竞得上海松江新城宅地,溢价率20.42%
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任
  • 上海杨浦:优秀“博主”购房最高可获200万补贴
  • 欧洲承诺投资6亿欧元吸引外国科学家