influxdb Upload in eigenem Thread

Fohnbit

Top Contributor
Hallo!

Ich möchte Daten auf in eine Cloud DB schreiben. Für Java gibts dafür eine Vorlage.
Jedoch blockiert beim hochladen die Methode und das soll nicht sein.

Ich habe mir folgendes geschrieben:
Java:
InfluxDBClient client = null;
...
client = InfluxDBClientFactory.create(url, getPropertyToken().toCharArray());
...
Point point1 = Point.measurement("PV").addTags(tag)
                            .addField("Tagesertrag", inverter1.getDailyEnergyYield())
                            .time(Instant.now(), WritePrecision.S);
List<Point> points = new ArrayList<Point>();
points.add(point1);
Runnable r = new Upload(client, getPropertyBucket(), getPropertyOrganisation(), points);
new Thread(r).start();

und die Thread Klasse:
Java:
public class Upload implements Runnable {
    private InfluxDBClient client = null;
    private String bucket;
    private String org;
    private List<Point> points;

    public Upload(InfluxDBClient client, String bucket, String org, List<Point> points) {
        this.bucket = bucket;
        this.org = org;
        this.client = client;
        this.points = points;
    }

    public void run() {
        WriteApiBlocking writeApi = client.getWriteApiBlocking();
        writeApi.writePoints(bucket, org, points);
    }

}

Ich möchte die client Variable in der Haupt Klasse belassen, damit ich diesen stoppen und wieder starten kann.
Ich denk es ist performanter die Verbindung offen zu lassen, anstatt jedesmal zu öffnen und schließen?
 
Hallo!

Ich möchte Daten auf in eine Cloud DB schreiben. Für Java gibts dafür eine Vorlage.
Jedoch blockiert beim hochladen die Methode und das soll nicht sein.

Ich habe mir folgendes geschrieben:
Java:
InfluxDBClient client = null;
...
client = InfluxDBClientFactory.create(url, getPropertyToken().toCharArray());
...
Point point1 = Point.measurement("PV").addTags(tag)
                            .addField("Tagesertrag", inverter1.getDailyEnergyYield())
                            .time(Instant.now(), WritePrecision.S);
List<Point> points = new ArrayList<Point>();
points.add(point1);
Runnable r = new Upload(client, getPropertyBucket(), getPropertyOrganisation(), points);
new Thread(r).start();

und die Thread Klasse:
Java:
public class Upload implements Runnable {
    private InfluxDBClient client = null;
    private String bucket;
    private String org;
    private List<Point> points;

    public Upload(InfluxDBClient client, String bucket, String org, List<Point> points) {
        this.bucket = bucket;
        this.org = org;
        this.client = client;
        this.points = points;
    }

    public void run() {
        WriteApiBlocking writeApi = client.getWriteApiBlocking();
        writeApi.writePoints(bucket, org, points);
    }

}

Ich möchte die client Variable in der Haupt Klasse belassen, damit ich diesen stoppen und wieder starten kann.
Ich denk es ist performanter die Verbindung offen zu lassen, anstatt jedesmal zu öffnen und schließen?
Was heisst es blockiert? Warum willst du es offen lassen?
 
blockiere: Solange der Upload läuft, wartet mein Programm bis es fertig ist und ist nicht bereit für andere Operationen
offen lassen: Weil ich alle Sekunden Daten hochlade und es wohl keinen Sinn macht, jede Sekunde es neu zu öffnen/schließen.
 

Neue Themen


Zurück
Oben