java influx DB工具类
配置
application-properties:
spring.influxdb.url=${influxdb_host:127.0.0.1}
spring.influxdb.port=${influxdb_port:8086}
spring.influxdb.username=${influxdb_username:root}
spring.influxdb.password=${influxdb_password:root}
spring.influxdb.database=${influxdb_database:test}
InfluxDBConfig
import com....utils.InfluxDBConnect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @ConfigurationProperties("application.properties")
@Configuration
public class InfluxDBConfig { @Value("${spring.influxdb.username}")
private String username;
@Value("${spring.influxdb.password}")
private String password;
@Value("${spring.influxdb.url}")
private String url;
@Value("${spring.influxdb.port}")
private String port;
@Value("${spring.influxdb.database}")
private String database; @Bean
public InfluxDBConnect getInfluxDBConnect(){
InfluxDBConnect influxDB = new InfluxDBConnect(username, password, "http://"+url+":"+port, database); influxDB.influxDbBuild(); influxDB.createRetentionPolicy();
return influxDB;
} }
工具类
influxDBConnect类:
import lombok.Data;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult; import java.util.Map;
import java.util.concurrent.TimeUnit; @Data
public class InfluxDBConnect {
private String username;// 用户名
private String password;// 密码
private String openurl;// 连接地址
private String database;// 数据库 private InfluxDB influxDB; public InfluxDBConnect(String username, String password, String openurl, String database) {
this.username = username;
this.password = password;
this.openurl = openurl;
this.database = database;
} /** 连接时序数据库;获得InfluxDB **/
public InfluxDB influxDbBuild() {
if (influxDB == null) {
influxDB = InfluxDBFactory.connect(openurl, username, password);
influxDB.createDatabase(database); }
return influxDB;
} /**
* 设置数据保存策略 defalut 策略名 /database 数据库名/ 30d 数据保存时限30天/ 1 副本个数为1/ 结尾DEFAULT
* 表示 设为默认的策略
*/
public void createRetentionPolicy() {
String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
"defalut", database, "7200d", 1);
this.query(command);
} /**
* 查询
*
* @param command 查询语句
* @return
*/
public QueryResult query(String command) {
return influxDB.query(new Query(command, database));
}
public QueryResult query(String command, TimeUnit unit) {
return influxDB.query(new Query(command, database),unit);
} /**
* 插入
* @param measurement 表
* @param tags 标签
* @param fields 字段
*/
public void insert(String measurement, Map<String, String> tags, Map<String, Object> fields, long time) {
Point.Builder builder = Point.measurement(measurement);
builder.time(time, TimeUnit.MILLISECONDS);
builder.tag(tags);
builder.fields(fields);
influxDB.write(database, "", builder.build());
} /**
* 插入
* @param measurement 表
* @param tags 标签
* @param fields 字段
*/
public void insert(String measurement, Map<String, String> tags, Map<String, Object> fields){
Point.Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(fields); influxDB.write(database, "", builder.build());
} /**
* 插入
* @param batchPoints 批量插入
*/
public void batchInsert(BatchPoints batchPoints){
influxDB.write(batchPoints);
} /**
* 删除
* @param command 删除语句
* @return 返回错误信息
*/
public String deleteMeasurementData(String command) {
QueryResult result = influxDB.query(new Query(command, database));
return result.getError();
} /**
* 创建数据库
* @param dbName
*/
public void createDB(String dbName) {
influxDB.createDatabase(dbName);
} /**
* 删除数据库
*
* @param dbName
*/
public void deleteDB(String dbName) {
influxDB.deleteDatabase(dbName);
} }
查询返回值包的层数很多,可以预处理
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; @Slf4j
public class InfluxdbUtil { public static List<Object> queryInfluxdb(String query_sql, String table_type, InfluxDBConnect influxDB) {
long starttime = System.currentTimeMillis();
QueryResult result = influxDB.query(query_sql.toString(), TimeUnit.MILLISECONDS);
long endtime = System.currentTimeMillis(); List<Object> influx_data_list = getInfluxData(result.getResults().get(0), table_type); return influx_data_list; }
public static List<Object> getInfluxData(QueryResult.Result result, String table_type) {
List<Object> influx_data_list = null;
if (null != result) {
influx_data_list = new ArrayList<>(); List<QueryResult.Series> series = result.getSeries();
if (null != series && series.size() > 0) {
for (QueryResult.Series serie : series) {
List<List<Object>> values = serie.getValues(); List<Object> result_list = getInfluxDataAndBuild(values, serie, table_type); influx_data_list.addAll(result_list);
}
}
} return influx_data_list;
} public static List<Object> getInfluxDataAndBuild(List<List<Object>> values, QueryResult.Series
serie, String table_type) {
List<Object> influx_data_list = new ArrayList<>();
List<String> influx_cloumns = serie.getColumns();
Map<String, String> influx_tags = serie.getTags(); Map<String, Object> build_maps; if (values.size() > 0) { for (int i = 0; i < values.size(); i++) {
build_maps = new LinkedHashMap<>();
if (null != influx_tags) { for (Map.Entry<String, String> entry : influx_tags.entrySet()) {
String entry_key = entry.getKey();
if (entry_key.contains("tag_")) {
entry_key = entry_key.substring(4);
}
build_maps.put(entry_key, entry.getValue());
}
}
Object[] influx_Obj = values.get(i).toArray(); for (int j = 0; j < influx_Obj.length; j++) {
String build_maps_key = influx_cloumns.get(j);
if (build_maps_key.equals("time")) {
if (table_type.equals("normal")) {
BigDecimal bd = new BigDecimal(String.valueOf(influx_Obj[j]));
build_maps.put("timestamp", bd.toPlainString());
} else if (table_type.equals("polymerize")) {
// build_maps.put("timestamp", DateUtil.dateToStampAndAddMinute(String.valueOf(influx_Obj[j])));
}
} else {
if (build_maps_key.contains("tag_")) {
build_maps_key = build_maps_key.substring(4);
} build_maps.put(build_maps_key, influx_Obj[j]);
}
} influx_data_list.add(build_maps);
}
}
return influx_data_list;
}
}
java influx DB工具类的更多相关文章
- HttpTool.java(在java tool util工具类中已存在) 暂保留
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
- java文件处理工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...
- java格式处理工具类
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。
1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...
- JAVA 8 日期工具类
JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...
- JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)
系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...
- java 解析excel工具类
java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...
随机推荐
- 【自己给自己题目做】:如何用裸的 Canvas 实现魔方效果
最终demo -> 3d魔方 体验方法: 浮动鼠标找到合适的位置,按空格键暂停 选择要翻转的3*3模块,找到相邻两个正方体,鼠标点击第一个正方体,并且一直保持鼠标按下的状态直到移到第二个正方体后 ...
- button按钮的状态为disabled禁用状态,click事件无法触发,但是为什么touchstart下却依然可以触发
切换到移动模拟模式,并点击按钮,查看控制台. 发现click没有事件没有触发,而touch事件依然触发. 解决办法: 对于移动端我们使用css来禁止按钮,达到disable的效果: 对,就是这个神奇的 ...
- sql 中 '' 与 null 的区别
SELECT * from t_company where content = '' SELECT * from t_company where content is null update t_co ...
- faster_rcnn mAP
- apt-get和yum
1.apt-get是dpkg系的,或者说debian系的,如ubuntu 2.yum是红帽系的,如中标麒麟
- sql 查找最晚入职员工
题目描述 查找最晚入职员工的所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`fi ...
- git push时出现大文件的处理方法
最近在提交项目时出现报错 文件限制只能100M,但是里面有个文件202M,超过了码云的限制. 所以顺手就把这个文件删除了 然后发现还是同样的报错,反复检查目录还是不行,找了资料说,需要git rm 命 ...
- Recurrent neural network (RNN) - Pytorch版
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...
- git实现码云的上传和下载
上传步骤: 1.码云上新建一个项目 XXXX? ?(项目名) 2.本地创建一个文件夹E:/XXXX,然后使用git bash? ?? 3.cd 到本地文件夹中E:/XXXX? //如果是在创建的文件中 ...
- [转帖]MySQL语句大全
MySQL语句大全 https://www.cnblogs.com/jicki/p/5548676.html 一.连接mysql. 格式: mysql -h主机地址 -u用户名 -p用户密码 二.修改 ...