springboot 操作influxdb 增加插入


轉載自:https://blog.csdn.net/dailuwen/article/details/73741297

實體類:

package com.influxdb.pojo; 

import java.io.Serializable;

public class CodeInfo implements Serializable{

private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String code;
private String descr;
private String descrE;
private String createdBy;
private Long createdAt;
private String time;
private String tagCode;
private String tagName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescr() {
return descr;
}
public void setDescr(String descr) {
this.descr = descr;
}
public String getDescrE() {
return descrE;
}
public void setDescrE(String descrE) {
this.descrE = descrE;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Long createdAt) {
this.createdAt = createdAt;
} public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getTagCode() {
return tagCode;
}
public void setTagCode(String tagCode) {
this.tagCode = tagCode;
}
public String getTagName() {
return tagName;
}
public void setTagName(String tagName) {
this.tagName = tagName;
}
}

 

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);
}

測試

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();    
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM