Springboot3.5 集成InfluxDB 2.x版本最佳实践

InfluxDB 2.x 跟 1.x 在接入方式和API上有明显变化,官方推荐用 InfluxDB Java Client 6.x 这个库(而不是老的1.x客户端),而且要用 Token 鉴权。

下面给详细梳理一下 Spring Boot 3.5 集成 InfluxDB 2.x 的典型用法,包括依赖、配置、常用的读写操作,并附有详细注释和最佳实践。


1. 添加依赖

在你的 build.gradle 里加上(如果是 Maven,也有类似依赖):

// Gradle (Kotlin DSL)
implementation("com.influxdb:influxdb-client-java:6.11.0")

或者

<!-- Maven -->
<dependency>
  <groupId>com.influxdb</groupId>
  <artifactId>influxdb-client-java</artifactId>
  <version>6.11.0</version>
</dependency>

2. application.yml 配置示例

influx:
  url: http://localhost:8086
  token: your_influxdb_token
  org: your_org
  bucket: your_bucket

3. 创建配置类

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class InfluxDBConfig {

    @Value("${influx.url}")
    private String url;
    @Value("${influx.token}")
    private String token;
    @Value("${influx.org}")
    private String org;
    @Value("${influx.bucket}")
    private String bucket;

    @Bean
    public InfluxDBClient influxDBClient() {
        // 初始化InfluxDB2客户端
        return InfluxDBClientFactory.create(url, token.toCharArray(), org, bucket);
    }
}

这样你就可以用@Autowired InfluxDBClient influxDBClient在Spring中注入并用它了。


4. 写数据示例

定义一个POJO(可选,但推荐)

import com.influxdb.annotations.Column;
import com.influxdb.annotations.Measurement;
import lombok.Data;

@Measurement(name = "temperature")
@Data
public class Temperature {

    @Column(tag = true)
    private String location;

    @Column
    private Double value;

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

写入数据

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.write.Point;
import com.influxdb.client.WriteApi;
import org.springframework.stereotype.Service;
import java.time.Instant;

@Service
public class InfluxService {
    private final InfluxDBClient influxDBClient;

    public InfluxService(InfluxDBClient influxDBClient) {
        this.influxDBClient = influxDBClient;
    }

    public void writeData() {
        // 推荐用Point方式
        Point point = Point.measurement("temperature")
            .addTag("location", "office")
            .addField("value", 23.5)
            .time(Instant.now(), WritePrecision.NS);

        try (WriteApi writeApi = influxDBClient.getWriteApi()) {
            writeApi.writePoint(point);
        }
    }
}

你也可以直接写POJO,使用 influxDBClient.getWriteApiBlocking().writeMeasurement(...)


5. 查询数据

使用 Flux 语法(InfluxDB 2.x 推荐)

import com.influxdb.client.QueryApi;
import com.influxdb.query.FluxTable;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class InfluxService {
    private final InfluxDBClient influxDBClient;
    private final String bucket;
    private final String org;

    public InfluxService(InfluxDBClient influxDBClient,
                         @Value("${influx.bucket}") String bucket,
                         @Value("${influx.org}") String org) {
        this.influxDBClient = influxDBClient;
        this.bucket = bucket;
        this.org = org;
    }

    public void queryData() {
        String flux = String.format(
            "from(bucket:\"%s\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"temperature\")",
            bucket
        );

        QueryApi queryApi = influxDBClient.getQueryApi();
        List<FluxTable> tables = queryApi.query(flux, org);
        for (FluxTable table : tables) {
            table.getRecords().forEach(record -> {
                System.out.println(record.getTime() + ": " + record.getValue());
            });
        }
    }
}

6. Token 获取方法

InfluxDB 2.x 默认用 Token 认证。
Token 需要在 InfluxDB Web 控制台里创建(管理员 -> API Tokens)。
每个 Token 可指定 bucket 的访问权限,生产环境要限制好写/读权限。


7. 常见问题 & 实践建议

  • 连接池:InfluxDBClient 本身是线程安全的,可以单例使用。

  • 异常处理:务必try/catch写操作,否则连接断开时容易丢数据。

  • 性能优化:大批量写入建议用批量API,减少网络请求。

  • POJO注解:建议用注解的方式建Model类,方便直接读写。


8. 官方文档推荐入口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值