【InfluxDB使用】Windows版本SpringBoot使用influxDB

1、Windows版本下载及可视化,参考如下(默认的账号密码都是admin)
https://blog.csdn.net/weixin_40973127/article/details/117438540
基本使用手册
https://www.hellodemos.com/hello-influxdb/influxdb-influx-group.html
虽然和SQL类似,但是实际应用的时候还是会遇到很多不同地方,比如没有between and 时区查询出来也差8个小时等,都可以具体问题具体搜索

2、Java使用工具类,参考如下
https://blog.csdn.net/x541211190/article/details/83216589
下边是我修改的其中一个方法,把插入的时候修正了+8个小时

    /**
     * 插入单条数据写法1
     *
     * @param measurement
     * @param trueReprotTime 
     * @param nh 
     * @param reportTime 
     * @param lampId 
     */
    public void insertOne01(String measurement, Long lampId, Date reportTime, String nh, Date trueReprotTime) {
        //构建
        Point.Builder builder = Point.measurement(measurement);
       
        //可指定时间戳
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(reportTime.toInstant(), zoneId);
        builder.time(localDateTime.plusHours(8)
                .toInstant(ZoneOffset.of("+8"))
                .toEpochMilli(), TimeUnit.MILLISECONDS); 
        //tag属性只能存储String类型 -索引列
        builder.tag("lampid",lampId.toString());
        builder.tag("reportTime",String.valueOf(reportTime.getTime()));
        //设置field
        builder.addField("trueReprotTime",trueReprotTime.getTime());
        builder.addField("nh",nh);
        influxDB.write(builder.build());
    }

3、MYSQL数据库迁移部分数据至Influxdb,写个python

import datetime
import random
import time
from influxdb import InfluxDBClient
import pymysql  # 引入mysql包
import pandas as pd

db = pymysql.connect(host="localhost", user="root", password="xxxxx", db="parking", port=3306)  # 连接mysql
cur = db.cursor()  # 获取游标
sql = "select lamp_id,report_time,truereport_time,sum_percent_seconds  from la_lamp_percent_seconds"
cur.execute(sql)  # 执行sql
assert isinstance(cur, object)
results = cur.fetchall()  # 获取所有数据

host = '127.0.0.1'
port = 8086
user = 'admin'
password = 'xxxxxx'
dbname = 'mydb'
# influxdb 数据连接
n = 0
start = datetime.datetime.now()
conn_db = InfluxDBClient(host, port, user, password, dbname)  # 连接influxdb
for row in results:  # 循环插入数据
    lamp_id = row[0]
    report_time = row[1]
    truereport_time = row[2]
    sum_percent_seconds = row[3]
    shijianchuo_report_time=int(round((pd.to_datetime(report_time, utc=True, infer_datetime_format=True).timestamp()-28800) * 1000))
    shijianchuo_truereport_time=int(round((pd.to_datetime(truereport_time, utc=True, infer_datetime_format=True).timestamp()-28800) * 1000))
   #  print(int(round((pd.to_datetime(report_time, utc=True, infer_datetime_format=True).timestamp()-28800) * 1000)))
    n += 1
    print("条数:", n)
    json_body = [
        {
            "measurement": "per",  # 表名
            "tags": {
                "lampid": lamp_id,
                "reportTime": shijianchuo_report_time
            },
            "time": report_time,
            "fields": {
                "trueReportTime": shijianchuo_truereport_time,
                "nh": float(sum_percent_seconds)
            }
        }
    ]  # 插入influxdb格式
    conn_db.write_points(json_body)  # 写入数据,同时创建表
conn_db.close()  # 关闭influxdb连接
db.close()  # 管理mysql游标

如遇问题,参考如下
https://blog.csdn.net/qq_41767116/article/details/119988991

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个开源的 Java Web 开发框架,它提供了一些非常便捷的工具和组件,可以帮助我们快速地搭建一个健壮的 Web 应用程序。InfluxDB 是一种高性能、分布式、时序数据库,它主要用于存储和查询各种时间序列数据,例如系统指标、应用程序日志、传感器数据等。 在 Spring Boot 中,我们可以通过使用 InfluxDB 的 Java 客户端库来实现与 InfluxDB 的交互。下面是一个示例代码,演示了如何在 Spring Boot使用 InfluxDB: 1.添加 InfluxDB 的 Maven 依赖: ``` <dependency> <groupId>org.influxdb</groupId> <artifactId>influxdb-java</artifactId> <version>2.17</version> </dependency> ``` 2.在 application.properties 文件中配置 InfluxDB 的连接信息: ``` influxdb.url=http://localhost:8086 influxdb.username=myusername influxdb.password=mypassword influxdb.database=mydatabase ``` 3.创建一个 InfluxDB 连接池: ``` @Configuration public class InfluxDBConfig { @Autowired private InfluxDBProperties properties; @Bean public InfluxDB influxDB() { InfluxDB influxDB = InfluxDBFactory.connect(properties.getUrl(), properties.getUsername(), properties.getPassword()); influxDB.setDatabase(properties.getDatabase()); influxDB.enableBatch(2000, 100, TimeUnit.MILLISECONDS); return influxDB; } } ``` 4.定义一个数据模型类: ``` @Data @NoArgsConstructor @AllArgsConstructor @Builder public class MyData { @Column(name = "time") private LocalDateTime time; @Column(name = "value") private Double value; @Column(name = "tag1") private String tag1; @Column(name = "tag2") private String tag2; } ``` 5.编写一个 InfluxDB 操作类: ``` @Repository public class MyDataRepository { @Autowired private InfluxDB influxDB; private final static String MEASUREMENT_NAME = "mydata"; public void save(MyData myData) { Point point = Point.measurement(MEASUREMENT_NAME) .time(Timestamp.valueOf(myData.getTime()).getTime(), TimeUnit.MILLISECONDS) .addField("value", myData.getValue()) .tag("tag1", myData.getTag1()) .tag("tag2", myData.getTag2()) .build(); influxDB.write(point); } public List<MyData> findByTag1AndTag2(String tag1, String tag2) { Query query = new Query("SELECT * FROM " + MEASUREMENT_NAME + " WHERE tag1='" + tag1 + "' AND tag2='" + tag2 + "'", influxDB.getDatabase()); QueryResult result = influxDB.query(query); return result.getResults().stream() .flatMap(r -> r.getSeries().stream()) .flatMap(s -> s.getValues().stream()) .map(v -> MyData.builder() .time(LocalDateTime.parse((String) v.get(0), DateTimeFormatter.ISO_DATE_TIME)) .value(Double.parseDouble(v.get(1).toString())) .tag1(s.getTags().get("tag1")) .tag2(s.getTags().get("tag2")) .build()) .collect(Collectors.toList()); } } ``` 6.在 Controller 中使用 MyDataRepository: ``` @RestController public class MyController { @Autowired private MyDataRepository myDataRepository; @PostMapping("/mydata") public void saveMyData(@RequestBody MyData myData) { myDataRepository.save(myData); } @GetMapping("/mydata") public List<MyData> getMyData(@RequestParam String tag1, @RequestParam String tag2) { return myDataRepository.findByTag1AndTag2(tag1, tag2); } } ``` 以上代码演示了如何在 Spring Boot使用 InfluxDB 进行数据存储和查询。我们可以根据具体的业务需求进行相应的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值