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文件
主要为修改数据存储地址
开启flux功能
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版本!