首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InfluxDB异常: org.influxdb.InfluxDBException:{“代码”:“未经授权”,“消息”:“未经授权”}

InfluxDB异常: org.influxdb.InfluxDBException:{“代码”:“未经授权”,“消息”:“未经授权”}
EN

Stack Overflow用户
提问于 2021-07-27 10:23:05
回答 1查看 1.7K关注 0票数 1

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

代码语言:javascript
运行
复制
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();
        }
        
    }

**我正在犯的错误**

代码语言:javascript
运行
复制
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)

当我在web浏览器上点击http://localhost:8086/之后使用相同的凭证,并且它运行良好,但是当我试图通过java代码连接时,它不工作,并且抛出以上的异常。

找不到问题到底在哪里。

有人能建议/找出这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-09 18:44:05

当我试图用进水数据库编写数据时,我也面临着同样的问题。但是我已经通过更新图书馆来解决这个问题。我相信您使用的是进水数据库2.x版本,而不是1.x。在这种情况下,请使用以下依赖项。

而不是

代码语言:javascript
运行
复制
<dependency>
        <groupId>org.influxdb</groupId>
        <artifactId>influxdb-java</artifactId>
        <version>${influxdb.version}</version>
    </dependency>

使用这个

代码语言:javascript
运行
复制
   <dependency>
        <groupId>com.influxdb</groupId>
        <artifactId>influxdb-client-java</artifactId>
        <version>4.0.0</version>
    </dependency>

使用这个库,您可以执行如下所示的写入和查询操作。如果你观察到下面的代码,你可以清楚地看到你需要提供网址,令牌,org和桶,而不是用户名和密码。

代码语言:javascript
运行
复制
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;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68543181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档