配置

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工具类的更多相关文章

  1. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  2. java文件处理工具类

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...

  3. java格式处理工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  4. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...

  5. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  6. 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。

    1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...

  7. JAVA 8 日期工具类

    JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...

  8. JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)

    系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...

  9. java 解析excel工具类

      java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...

随机推荐

  1. api-ms-win-crt-runtime-l1-1-0.dll 丢失

    api-ms-win-crt-runtime就是MFC的运行时环境的库,python在windows上编译也是用微软的visual studio C++编译的,底层也会用到微软提供的C++库和runt ...

  2. Perf -- Linux下的系统性能调优工具,第 1 部分 应用程序调优的使用和示例 Tracepoint 是散落在内核源代码中的一些 hook,一旦使能,它们便可以在特定的代码被运行到时被触发,这一特性可以被各种 trace/debug 工具所使用。Perf 就是该特性的用户之一。

    Perf -- Linux下的系统性能调优工具,第 1 部分 应用程序调优的使用和示例 https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/i ...

  3. Tosca 一不小心,我把那一排模块全关闭了,怎么打开

    #写在前面, 之前用的时候,学了很多,基本都忘记了,现在再重新用,啥啥都不记得了,我还是应该事无巨细的全部记下来 红线这一排我关了好多,在哪儿打开 在这打开

  4. github资源汇总

    github免费的编程中文书籍索引 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1) Python 资源大全中文版

  5. ISO/IEC 9899:2011 条款6.8——语句和语句块

    6.8 语句和语句块 语法 1.statement: labeled-statement compound-statement         expression-statement         ...

  6. ISO/IEC 9899:2011 条款6.5.2——后缀操作符

    6.5.2 后缀操作符 语法 1.postfix-expression: primary-expression postfix-expression    [    expression    ] p ...

  7. 004-行为型-02-模板方法模式(Template Method)

    一.概述 定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤 1.1.适用场景 一次性实现一个算法的不变的部分,并将可变的行 ...

  8. Day1作业1:登陆接口(加入日志、注册功能)

    流程图如下: 最先考虑使用python中的list,以能取到user_list中的用户信息,但中途发现没有比较好的方法截取取密码,还是新手的缘故,最终选择了使用dict,以方便截取用户名以及相应的密码 ...

  9. php 3.2 生成压缩文件,并下载

    public function zip_download() { $array = array( 'http://local.qki.com/site_upload/erweima/20190826/ ...

  10. 【编程基础】CppLint工具使用过程

    前言 coding最好要形成一定的编程风格,一般常用的开源风格有google code style,可以使用cpplint工具检查是否符合该编程风格. 目录 1. linux系统使用过程: 2. wi ...