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のパッケージで、もう1つはFluxClientのパッケージですが、FluxClientのパッケージはInfluxDBClientのパッケージに依存します。
3.InfluxDBのフラックス機能をオンにします
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版本!