influxdb-client-java
This repository contains the reference JVM clients for the InfluxDB 2.x. Currently, Java, Reactive, Kotlin and Scala clients are implemented.
Note: Use this client library with InfluxDB 2.x and InfluxDB 1.8+ (). For connecting to InfluxDB 1.7 or earlier instances, use the influxdb-java client library.
This section contains links to the client library documentation.
Features
- InfluxDB 2.x client
- Querying data using the Flux language
- Writing data using
- Data Point
- POJO
- InfluxDB 2.x Management API client for managing
- sources, buckets
- tasks
- authorizations
- health check
- …
- Supports querying using the Flux language over the InfluxDB 1.7+ REST API ()
The Java, Reactive, OSGi, Kotlin and Scala clients are implemented for the InfluxDB 2.x:
There is also possibility to use the Flux language over the InfluxDB 1.7+ provided by:
The last useful part is that helps construct Flux query by Query builder pattern:
How To Use
This clients are hosted in Maven central Repository.
The following example demonstrates how to write data to InfluxDB 2.x and read them back using the Flux language.
Installation
Download the latest version:
Maven dependency:
<dependency>
<groupId>com.influxdb</groupId>
<artifactId>influxdb-client-java</artifactId>
<version>5.0.0</version>
</dependency>
Or when using Gradle:
dependencies {
implementation "com.influxdb:influxdb-client-java:5.0.0"
}
package example;
import java.time.Instant;
import java.util.List;
import com.influxdb.annotations.Column;
import com.influxdb.annotations.Measurement;
import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.QueryApi;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.influxdb.client.write.Point;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;
public class InfluxDB2Example {
private static char[] token = "my-token".toCharArray();
private static String org = "my-org";
private static String bucket = "my-bucket";
public static void main(final String[] args) {
InfluxDBClient influxDBClient = InfluxDBClientFactory.create("http://localhost:8086", token, org, bucket);
//
// Write data
//
WriteApiBlocking writeApi = influxDBClient.getWriteApiBlocking();
//
// Write by Data Point
//
Point point = Point.measurement("temperature")
.addTag("location", "west")
.time(Instant.now().toEpochMilli(), WritePrecision.MS);
writeApi.writePoint(point);
//
// Write by LineProtocol
//
writeApi.writeRecord(WritePrecision.NS, "temperature,location=north value=60.0");
//
// Write by POJO
//
Temperature temperature = new Temperature();
temperature.location = "south";
temperature.value = 62D;
temperature.time = Instant.now();
writeApi.writeMeasurement( WritePrecision.NS, temperature);
//
// Query data
//
String flux = "from(bucket:\"my-bucket\") |> range(start: 0)";
QueryApi queryApi = influxDBClient.getQueryApi();
List<FluxTable> tables = queryApi.query(flux);
for (FluxTable fluxTable : tables) {
List<FluxRecord> records = fluxTable.getRecords();
for (FluxRecord fluxRecord : records) {
}
}
influxDBClient.close();
}
@Measurement(name = "temperature")
private static class Temperature {
@Column(tag = true)
String location;
@Column
Double value;
@Column(timestamp = true)
Instant time;
}
}
The following example demonstrates how to use a InfluxDB 2.x Management API. For further information see client documentation.
Installation
Download the latest version:
Maven dependency:
Or when using Gradle:
dependencies {
implementation "com.influxdb:influxdb-client-java:5.0.0"
}
package example;
import java.util.Arrays;
import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.domain.Authorization;
import com.influxdb.client.domain.Bucket;
import com.influxdb.client.domain.Permission;
import com.influxdb.client.domain.PermissionResource;
import com.influxdb.client.domain.BucketRetentionRules;
public class InfluxDB2ManagementExample {
private static char[] token = "my-token".toCharArray();
public static void main(final String[] args) {
InfluxDBClient influxDBClient = InfluxDBClientFactory.create("http://localhost:8086", token);
//
// Create bucket "iot_bucket" with data retention set to 3,600 seconds
//
BucketRetentionRules retention = new BucketRetentionRules();
retention.setEverySeconds(3600);
Bucket bucket = influxDBClient.getBucketsApi().createBucket("iot-bucket", retention, "12bdc4164c2e8141");
//
// Create access token to "iot_bucket"
//
PermissionResource resource = new PermissionResource();
resource.setId(bucket.getId());
resource.setOrgID("12bdc4164c2e8141");
resource.setType(PermissionResource.TYPE_BUCKETS);
// Read permission
Permission read = new Permission();
read.setAction(Permission.ActionEnum.READ);
// Write permission
Permission write = new Permission();
write.setResource(resource);
write.setAction(Permission.ActionEnum.WRITE);
Authorization authorization = influxDBClient.getAuthorizationsApi()
.createAuthorization("12bdc4164c2e8141", Arrays.asList(read, write));
//
// Created token that can be use for writes to "iot_bucket"
//
String token = authorization.getToken();
influxDBClient.close();
}
}
for InfluxDB 2.x. This allow you to easily move from InfluxDB 1.x to InfluxDB 2.x Cloud or open source.
The following forward compatible APIs are available:
The following example demonstrates querying using the Flux language.
Installation
Download the latest version:
Maven dependency:
<dependency>
<groupId>com.influxdb</groupId>
<artifactId>influxdb-client-flux</artifactId>
<version>5.0.0</version>
</dependency>
Or when using Gradle:
package example;
import java.util.List;
import com.influxdb.client.flux.FluxClient;
import com.influxdb.client.flux.FluxClientFactory;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;
public class FluxExample {
public static void main(String[] args) {
FluxClient fluxClient = FluxClientFactory.create("http://localhost:8086/");
//
// Flux
//
String flux = "from(bucket: \"telegraf\")\n" +
" |> range(start: -1d)" +
" |> filter(fn: (r) => (r[\"_measurement\"] == \"cpu\" and r[\"_field\"] == \"usage_system\"))" +
" |> sample(n: 5, pos: 1)";
//
// Synchronous query
//
List<FluxTable> tables = fluxClient.query(flux);
for (FluxTable fluxTable : tables) {
List<FluxRecord> records = fluxTable.getRecords();
for (FluxRecord fluxRecord : records) {
System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("_value"));
}
}
//
// 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();
}
}
- Java 1.8+ (tested with jdk8)
- Maven 3.0+ (tested with maven 3.5.0)
- Docker daemon running
- The latest InfluxDB 2.x and InfluxDB 1.X docker instances, which can be started using the
./scripts/influxdb-restart.sh
script
Once these are in place you can build influxdb-client-java with all tests with:
$ mvn clean install
If you don’t have Docker running locally, you can skip tests with the -DskipTests
flag set to true:
$ mvn clean install -DskipTests=true
If you have Docker running, but it is not available over localhost (e.g. you are on a Mac and using docker-machine
) you can set optional environment variables to point to the correct IP addresses and ports:
INFLUXDB_IP
INFLUXDB_PORT_API
INFLUXDB_2_IP
INFLUXDB_2_PORT_API
Contributing
If you would like to contribute code you can do through GitHub by forking the repository and sending a pull request into the branch.