【问题标题】:InfluxDB Exception : org.influxdb.InfluxDBException: {"code":"unauthorized","message":"Unauthorized"}InfluxDB 异常:org.influxdb.InfluxDBException: {"code":"unauthorized","message":"Unauthorized"}
【发布时间】:2021-07-27 10:23:05
【问题描述】:

尝试通过 Java 连接 InfluxDB。请检查以下代码:

public InfluxConnect() {
        
        this.influxDB = InfluxDBFactory.connect("http://localhost:8086", "avinflux", "Stallions@7891");
        this.influxDB.setLogLevel(InfluxDB.LogLevel.BASIC);
        Pong response = this.influxDB.ping();
        if (response.getVersion().equalsIgnoreCase("unknown")) {
          System.out.println("unknown");
        } 
        else System.out.println("response is : "+response.toString());
        try {
            @SuppressWarnings("deprecation")
            String databaseName = "NOAA_water_database";
            this.influxDB.query(new Query("CREATE DATABASE " + databaseName));
            this.influxDB.setDatabase(databaseName);
        }
        catch(Exception e)
        {
            System.out.println("In Catch");
            e.printStackTrace();
        }
        
    }

**我得到的错误**

Jul 27, 2021 3:40:57 PM okhttp3.internal.platform.Platform log
INFO: <-- 401 Unauthorized http://192.168.105.191:8086/query?q=CREATE+DATABASE+NOAA_water_database (0ms, 48-byte body)
In Catch
org.influxdb.InfluxDBException: {"code":"unauthorized","message":"Unauthorized"}
    at org.influxdb.InfluxDBException.buildExceptionForErrorState(InfluxDBException.java:175)

当我在网络浏览器上点击 http://localhost:8086/ 后使用相同的凭据并且它工作正常但是当我尝试通过 java 代码连接时它不工作并抛出以上异常

无法找到问题的确切位置。

有人可以建议/找出问题吗?

【问题讨论】:

    标签: java influxdb java-11


    【解决方案1】:

    当我尝试在 influxdb 中写入数据时,我也遇到了同样的问题。但我已经通过更新库解决了这个问题。我相信您使用的是 influxdb 2.x 版本而不是 1.x。在这种情况下,请使用以下依赖项。

    而不是

    <dependency>
            <groupId>org.influxdb</groupId>
            <artifactId>influxdb-java</artifactId>
            <version>${influxdb.version}</version>
        </dependency>
    

    使用这个

       <dependency>
            <groupId>com.influxdb</groupId>
            <artifactId>influxdb-client-java</artifactId>
            <version>4.0.0</version>
        </dependency>
    

    使用此库,您可以执行如下所示的写入和查询操作。如果您观察下面的代码,您可以清楚地看到您需要提供 url、token、org 和 bucket,而不是用户名和密码。

    package com.influx.writer;
    
    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 2019-06-18
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多