1. 진술
현재 내용은 주로 Java를 사용하여 구현하고 InfluxDB를 사용하여 데이터를 추가하고 데이터 작업을 쿼리하는 것입니다.
- FluxClient 모드, 구성 파일에서 켜야 함
- InfluxDBClient 방식
2. 기본 pom 종속성
<dependency>
<groupId>com.influxdb</groupId>
<artifactId>influxdb-client-java</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>com.influxdb</groupId>
<artifactId>influxdb-client-flux</artifactId>
<version>1.8.0</version>
</dependency>
위는 InfluxDBClient 패키지이고 다른 하나는 FluxClient 패키지이지만 FluxClient 패키지는 InfluxDBClient 패키지에 따라 다릅니다.
3. InfluxDB의 Flux 기능 켜기
1. 구성 파일 수정 : 위치etc/influxdb/influxdb.conf文件
주로 데이터 저장 주소 수정
플럭스 기능 활성화
2. 시작시 구성 파일을로드합니다.
./influxd -config /home/hy/influxdb-1.8.4-1/etc/influxdb/influxdb.conf
이때 구성 파일이 사용되며 그렇지 않으면 기본 구성이 사용됩니다!
4. Java를 사용하여 액세스
1. FluxClient 방식으로 쿼리 수행 (쿼리 작업 만 수행 가능)
/**
*
* @author hy
* @createTime 2021-03-14 11:59:48
* @description 使用Flux方式查询数据
*
*/
public static void queryExampleUsingFluxClient() {
FluxClient fluxClient = FluxClientFactory.create("http://192.168.1.101:8086/");
Boolean ping = fluxClient.ping();
System.out.println("是否可以连接InfluxDb:" + ping);
//
// Flux
//
String flux = "from(bucket: \"mydb\") " // bucket就代表当前的influxdb1.8中的database
+ " |> range(start: -3h, stop: 3h) " // 必须要有起始时间和结束时间
+ " |> filter(fn: (r) => r[\"_measurement\"] == \"treasures\")"; // _measurement 表示当前的series
/*
* String flux = String.format("from(bucket: \"%s\") " +
* " |> range(start: -3h, stop: 3h) " +
* " |> filter(fn: (r) => r[\"_measurement\"] == \"%s\") ", "mydb", "mem");
*/
// String flux ="chunked=true&db=mydb&epoch=ns&q=select * from treasures";
//
// Synchronous query
//
List<FluxTable> tables = fluxClient.query(flux);
System.out.println("开始显示数据===============>");
System.out.println("time : captain_id : value");
for (FluxTable fluxTable : tables) {
List<FluxRecord> records = fluxTable.getRecords(); // 获取实际的记录操作
// List<FluxColumn> columns = fluxTable.getColumns(); // 获取返回的列
// System.out.println(columns); // 下面的数据显示是按照当前的column中的label名称获取的数据
// System.out.println(records);
for (FluxRecord fluxRecord : records) {
System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("captain_id") + ":"
+ fluxRecord.getValueByKey("_value"));
}
}
System.out.println("开始显示数据<===============");
//
// Asynchronous query 。一个异步操作请求
//
/*
* fluxClient.query(flux, (cancellable, record) -> {
*
* // process the flux query result record System.out.println(record.getTime() +
* ": " + record.getValue());
*
* }, error -> {
*
* // error handling while processing result
* System.out.println("Error occurred: " + error.getMessage());
*
* }, () -> {
*
* // on complete System.out.println("Query completed"); });
*/
fluxClient.close();
}
InfluxDBClient 메서드 사용 (데이터 작업을 작성하거나 쿼리 작업을 수행 할 수 있음)
/**
*
* @author hy
* @createTime 2021-03-14 12:00:16
* @description 使用官方推荐的方式查询
*
*/
public static void queryExampleUseingInfluxDBClient() {
String database = "mydb";
String retentionPolicy = "autogen";
// 1.打开客户端
InfluxDBClient client = InfluxDBClientFactory.createV1("http://192.168.1.101:8086", "root",
"root".toCharArray(), database, retentionPolicy);
System.out.println("*** Write Points ***");
// 2.创建写入api
try (WriteApi writeApi = client.getWriteApi()) {
Point point = Point.measurement("treasures").addTag("captain_id", "crunch").addField("value", 19.5f);
System.out.println(point.toLineProtocol());
// 执行写入数据操作
writeApi.writePoint(point);
}
// 开始执行查询操作
System.out.println("*** Query Points ***");
String query = String.format("from(bucket: \"%s\") " // bucket就代表当前的influxdb1.8中的database
+ " |> range(start: -3h, stop: 3h) " // 必须要有起始时间和结束时间
+ " |> filter(fn: (r) => r[\"_measurement\"] == \"%s\")",database,"treasures"); // _measurement 表示当前的series
List<FluxTable> tables = client.getQueryApi().query(query);
tables.get(0).getRecords().forEach(record -> System.out.println(String.format("%s %s: %s %s", record.getTime(),
record.getMeasurement(), record.getField(), record.getValue())));
client.close();
}
결과는 성공적이었습니다! ,노트官方中influxdb-client-flux没有2.0.0版本!