Java版InfluxDB工具类
InfluxDB工具类
package com.influxdb.test; import java.util.Map; import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Point.Builder;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import org.springframework.util.StringUtils; /**
* 时序数据库 InfluxDB 连接
* @author Dai_LW
*
*/
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, "30d", 1);
this.query(command);
} /**
* 查询
* @param command 查询语句
* @return
*/
public QueryResult query(String command){
return influxDB.query(new Query(command, database));
} /**
* 插入
* @param measurement 表
* @param tags 标签
* @param fields 字段
*/
public void insert(String measurement, Map<String, String> tags, Map<String, Object> fields){
Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(fields); influxDB.write(database, "", builder.build());
} /**
* 删除
* @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);
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getOpenurl() {
return openurl;
} public void setOpenurl(String openurl) {
this.openurl = openurl;
} public void setDatabase(String database) {
this.database = database;
}
}
测试类
package com.influxdb.test; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import junit.framework.Assert; import org.influxdb.dto.QueryResult;
import org.influxdb.dto.QueryResult.Result;
import org.influxdb.dto.QueryResult.Series;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.BeanWrapperImpl; import com.influxdb.pojo.CodeInfo; public class InfluxDBTest { private InfluxDBConnect influxDB;
private String username = "admin";//用户名
private String password = "admin";//密码
private String openurl = "http://127.0.0.1:8086";//连接地址
private String database = "test_db";//数据库
private String measurement = "sys_code"; @Before
public void setUp(){
//创建 连接
influxDB = new InfluxDBConnect(username, password, openurl, database); influxDB.influxDbBuild(); influxDB.createRetentionPolicy(); // influxDB.deleteDB(database);
// influxDB.createDB(database);
} @Test
public void testInsert(){//测试数据插入
Map<String, String> tags = new HashMap<String, String>();
Map<String, Object> fields = new HashMap<String, Object>();
List<CodeInfo> list = new ArrayList<CodeInfo>(); CodeInfo info1 = new CodeInfo();
info1.setId(1L);
info1.setName("BANKS");
info1.setCode("ABC");
info1.setDescr("中国农业银行");
info1.setDescrE("ABC");
info1.setCreatedBy("system");
info1.setCreatedAt(new Date().getTime()); CodeInfo info2 = new CodeInfo();
info2.setId(2L);
info2.setName("BANKS");
info2.setCode("CCB");
info2.setDescr("中国建设银行");
info2.setDescrE("CCB");
info2.setCreatedBy("system");
info2.setCreatedAt(new Date().getTime()); list.add(info1);
list.add(info2); for(CodeInfo info : list){ tags.put("TAG_CODE", info.getCode());
tags.put("TAG_NAME", info.getName()); fields.put("ID", info.getId());
fields.put("NAME", info.getName());
fields.put("CODE", info.getCode());
fields.put("DESCR", info.getDescr());
fields.put("DESCR_E", info.getDescrE());
fields.put("CREATED_BY", info.getCreatedBy());
fields.put("CREATED_AT", info.getCreatedAt()); influxDB.insert(measurement, tags, fields);
}
} @Test
public void testQuery(){//测试数据查询
String command = "select * from sys_code";
QueryResult results = influxDB.query(command); if(results.getResults() == null){
return;
}
List<CodeInfo> lists = new ArrayList<CodeInfo>();
for (Result result : results.getResults()) { List<Series> series= result.getSeries();
for (Series serie : series) {
// Map<String, String> tags = serie.getTags();
List<List<Object>> values = serie.getValues();
List<String> columns = serie.getColumns(); lists.addAll(getQueryData(columns, values));
}
} Assert.assertTrue((!lists.isEmpty()));
Assert.assertEquals(2, lists.size());
} @Test
public void testQueryWhere(){//tag 列名 区分大小写
String command = "select * from sys_code where TAG_CODE='ABC'";
QueryResult results = influxDB.query(command); if(results.getResults() == null){
return;
}
List<CodeInfo> lists = new ArrayList<CodeInfo>();
for (Result result : results.getResults()) { List<Series> series= result.getSeries();
for (Series serie : series) {
List<List<Object>> values = serie.getValues();
List<String> columns = serie.getColumns(); lists.addAll(getQueryData(columns, values));
}
} Assert.assertTrue((!lists.isEmpty()));
Assert.assertEquals(1, lists.size()); CodeInfo info = lists.get(0); Assert.assertEquals(info.getCode(), "ABC"); } @Test
public void deletMeasurementData(){
String command = "delete from sys_code where TAG_CODE='ABC'";
String err = influxDB.deleteMeasurementData(command);
Assert.assertNull(err);
} /***整理列名、行数据***/
private List<CodeInfo> getQueryData(List<String> columns, List<List<Object>> values){
List<CodeInfo> lists = new ArrayList<CodeInfo>(); for (List<Object> list : values) {
CodeInfo info = new CodeInfo();
BeanWrapperImpl bean = new BeanWrapperImpl(info);
for(int i=0; i< list.size(); i++){ String propertyName = setColumns(columns.get(i));//字段名
Object value = list.get(i);//相应字段值
bean.setPropertyValue(propertyName, value);
} lists.add(info);
} return lists;
} /***转义字段***/
private String setColumns(String column){
String[] cols = column.split("_");
StringBuffer sb = new StringBuffer();
for(int i=0; i< cols.length; i++){
String col = cols[i].toLowerCase();
if(i != 0){
String start = col.substring(0, 1).toUpperCase();
String end = col.substring(1).toLowerCase();
col = start + end;
}
sb.append(col);
}
return sb.toString();
}
}
Java版InfluxDB工具类的更多相关文章
- java版RSA工具类
/** * RSA算法加密/解密工具类 */ public class RSAUtils { private static final Logger LOGGER = LoggerFactory.ge ...
- 170405、java版MD5工具类
package com.rick.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...
- java influx DB工具类
配置 application-properties: spring.influxdb.url=${influxdb_host:127.0.0.1} spring.influxdb.port=${inf ...
- 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 ...
随机推荐
- 【python 字符串】 字符串的相关方法(一)
将字符串首字母变为大写 -> capitalize() 方法 # 将字符串的首字母转换为大写 text = 'alet' ret = text.capitalize() print(ret) ...
- [ffmpeg] 多输入滤波同步方式(framesync)
滤波也不总是单一的输入,也存在对多个输入流进行滤波的需求,最常见的就是对视频添加可视水印,水印的组成通常为原视频以及作为水印的图片或者小动画,在ffmpeg中可以使用overlay滤波器进行水印添加. ...
- ILRuntime_NewbieGuide—导读
Welcome to the ILRuntime_NewbieGuide wiki! 入门篇:做个简单的案例 https://www.cnblogs.com/kerven/p/10237280.htm ...
- String方法,js中Array方法,ES5新增Array方法,以及jQuery中Array方法
相关阅读:https://blog.csdn.net/u013185654/article/details/78498393 相关阅读:https://www.cnblogs.com/huangyin ...
- 【LOJ#2402】[THUPC2017]天天爱射击(整体二分)
[LOJ#2402][THUPC2017]天天爱射击(整体二分) 题面 LOJ 题解 显然对于每块木板可以二分被打烂的时间. 那么直接上整体二分处理就行了. #include<iostream& ...
- setTimeout与setInterval
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法:setTimeout(code/function, milliseconds, param1, param2, ...) ...
- golang中使用ETCD
安装 下载ETCD https://github.com/etcd-io/etcd/releases/ 安装 我下载的是window版,直接解压就可以了,解压后有以下目录 点击etcd.exe运行 然 ...
- vue-cli 项目踩坑 npm install 时出错
1.报错如下: 2.此时你执行npm run dev / npm run build 会报错如下 npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! v ...
- Windows7系统基础操作
Windows7系统基础操作 操作系统是人机交互的时候桥梁,一种计算机软件,软件分为:系统软件+应用软件 区别是:系统软件是可以直接安装在硬件上的计算机由硬件和软件两部分组成 操作电脑核心是操作电脑的 ...
- 关于word-break和word-wrap的使用和区别
当一段文字有一个长长长的英文单词的情况下使用这两个属性的区别: word-wrap: 哈哈哈, aaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb word-break: ...