GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - influxdata/influxdb-client-java: InfluxDB 2 JVM Based Clients

BranchesTags
Open more actions menu

Latest commit

 

History

1,185 Commits
1,185 Commits

Folders and files

NameName
Last commit message
Last commit date
.circleci
.circleci
 
 
.github
.github
 
 
client-core
client-core
 
 
client-kotlin
client-kotlin
 
 
client-legacy
client-legacy
 
 
client-osgi
client-osgi
 
 
client-reactive
client-reactive
 
 
client-scala
client-scala
 
 
client-test
client-test
 
 
client-utils
client-utils
 
 
client
client
 
 
examples
examples
 
 
flux-dsl
flux-dsl
 
 
karaf
karaf
 
 
scripts
scripts
 
 
spring
spring
 
 
.gitignore
.gitignore
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
codecov.yml
codecov.yml
 
 
pom.xml
pom.xml
 
 

Repository files navigation

influxdb-client-java

CircleCI codecov License Maven Central Maven Site GitHub issues GitHub pull requests Slack Status

This repository contains the Java client library for use with InfluxDB 2.x and Flux. Currently, Java, Reactive, Kotlin and Scala clients are implemented. InfluxDB 3.x users should instead use the lightweight v3 client library. InfluxDB 1.x users should use the v1 client library.

For ease of migration and a consistent query and write experience, v2 users should consider using InfluxQL and the v1 client library.

  • Features
  • Clients
  • How To Use
    • Writes and Queries in InfluxDB 2.x
    • Use Management API to create a new Bucket in InfluxDB 2.x
    • Flux queries in InfluxDB 1.7+
  • Build Requirements
  • Contributing
  • License

Documentation

This section contains links to the client library documentation.

  • Product documentation, Getting Started
  • Examples
  • API Reference
  • Changelog

Features

  • InfluxDB 2.x client
    • Querying data using the Flux language
    • Querying data using the InfluxQL
    • Writing data using
      • Line Protocol
      • 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 (/api/v2/query endpoint)

Clients

The Java, Reactive, OSGi, Kotlin and Scala clients are implemented for the InfluxDB 2.x:

Client Description Documentation Compatibility
java The reference Java client that allows query, write and InfluxDB 2.x management. javadoc, readme 2.x
reactive The reference RxJava client for the InfluxDB 2.x that allows query and write in a reactive way. javadoc, readme 2.x
kotlin The reference Kotlin client that allows query and write for the InfluxDB 2.x by Kotlin Channel and Flow coroutines. KDoc, readme 2.x
scala The reference Scala client that allows query and write for the InfluxDB 2.x by Pekko Streams. Scaladoc, readme 2.x
osgi The reference OSGi (R6) client embedding Java and reactive clients and providing standard features (declarative services, configuration, event processing) for the InfluxDB 2.x. javadoc, readme 2.x
karaf The Apache Karaf feature definition for the InfluxDB 2.x. readme 2.x

There is also possibility to use the Flux language over the InfluxDB 1.7+ provided by:

Client Description Documentation Compatibility
flux The reference Java client that allows you to perform Flux queries against InfluxDB 1.7+. javadoc, readme 1.7+

The last useful part is flux-dsl that helps construct Flux query by Query builder pattern:

Flux flux = Flux
    .from("telegraf")
    .window(15L, ChronoUnit.MINUTES, 20L, ChronoUnit.SECONDS)
    .sum();
Module Description Documentation Compatibility
flux-dsl A Java query builder for the Flux language javadoc, readme 1.7+, 2.x

How To Use

This clients are hosted in Maven central Repository.

If you want to use it with the Maven, you have to add only the dependency on the artifact.

Writes and Queries in InfluxDB 2.x

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>8.0.0</version>
</dependency>
Or when using Gradle:
dependencies {
    implementation "com.influxdb:influxdb-client-java:8.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")
                .addField("value", 55D)
                .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) {
                System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("_value"));
            }
        }

        influxDBClient.close();
    }

    @Measurement(name = "temperature")
    private static class Temperature {

        @Column(tag = true)
        String location;

        @Column
        Double value;

        @Column(timestamp = true)
        Instant time;
    }
}

Use Management API to create a new Bucket in InfluxDB 2.x

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:
<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>8.0.0</version>
</dependency>
Or when using Gradle:
dependencies {
    implementation "com.influxdb:influxdb-client-java:8.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.setResource(resource);
        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();
        System.out.println("Token: " + token);

        influxDBClient.close();
    }
}

InfluxDB 1.8 API compatibility

InfluxDB 1.8.0 introduced forward compatibility APIs 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:

API Endpoint Description
QueryApi.java /api/v2/query Query data in InfluxDB 1.8.0+ using the InfluxDB 2.x API and Flux (endpoint should be enabled by flux-enabled option)
WriteApi.java /api/v2/write Write data to InfluxDB 1.8.0+ using the InfluxDB 2.x API
health() /health Check the health of your InfluxDB instance

For detail info see InfluxDB 1.8 example.

Flux queries in InfluxDB 1.7+

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>8.0.0</version>
</dependency>
Or when using Gradle:
dependencies {
    implementation "com.influxdb:influxdb-client-flux:8.0.0"
}
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();
    }
}

Build Requirements

  • Java 17+ (tested with JDK 17)
    • ⚠️ If you want to use older version of JDK, you have to use the 6.x version of the client.
  • 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
  • INFLUXDB_2_ONBOARDING_IP
  • INFLUXDB_2_ONBOARDING_PORT
$ export INFLUXDB_IP=192.168.99.100
$ mvn test

Contributing

If you would like to contribute code you can do through GitHub by forking the repository and sending a pull request into the master branch.

License

The InfluxDB 2.x JVM Based Clients are released under the MIT License.

About

InfluxDB 2 JVM Based Clients

influxdata.github.io/influxdb-client-java/

Topics

fluxinfluxdatainfluxdbjavareactiverxjavatimeseries

Resources

Readme
MIT license
Activity
Custom properties

Stars

478 stars

Watchers

33 watching

Forks

128 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.