SpringBoot 3.5 集成 InfluxDB 1.8

近年来,InfluxDB 的迭代进程显著加速,现已进化至 3.x 版本。然而,在实际应用场景中,用户群体更倾向于 使用 1.x 版本(尤其是 1.71.8 版本)。深入探究其背后原因,不难发现,自 2.x 版本起,InfluxDB 引入了全新的 Flux 语法,这无疑为用户设置了一定的学习门槛。相较于原有类 SQL 语法的 InfluxQL,其友好性与通用性均逊色不少。

从国内三大主流云服务提供商 的支持状况中,我们亦可窥见一斑:InfluxDB 1.x 版本显然更受市场青睐。更为引人注目的是,这些云厂商甚至未提供 2.x 及以上版本的部署选项,这一举措无疑进一步印证了新 Flux 语法并未获得广泛认可。毕竟,商业实践是检验产品的试金石。

一、SpringBoot 3.5 移除对 InfluxDB 1.8 的支持

近期,我们着手对项目展开了升级工作,将底层所依赖的 Spring Boot 框架升级至最新的 3.5 版本,此举旨在全面消除框架潜在的安全提示与漏洞风险,为项目的稳定运行筑牢安全防线。然而,升级工作完成后,却遭遇了一个棘手问题:InfluxDB 的配置类 代码区域呈现出一片报错"飘红" 的景象。仔细排查后发现,原本存在的包 org.springframework.boot.autoconfigure.influx 竟消失得无影无踪,仿佛被彻底抹去了一般。

此时,我的脑海中不由自主地浮现出一个画面:倘若你曾认真研读过 Spring Boot 3.2 的相关文档或提示信息,便会留意到其中有一段明确指出,后续版本将会终止对 Influx v1 的支持。

所谓有图有真相 O(∩_∩)O

从官方注释的详尽说明中,我们能够清晰洞察到:自 3.2 版本起,该类便已被明确标注为"过时(Deprecated) ",并明确预告将在 3.4 版本中彻底移除。与此同时,官方还贴心地给出了建议,推荐采用 InfluxDB 官方提供的标准方式来实现与 Spring Boot 的无缝集成。

为了探究这一变更,我特意查阅了 InfluxDB 的官方教程。一番研读后发现,这个新推荐的类库,仅对 InfluxDB 2.x 及更高版本提供支持。至此,一切谜团都迎刃而解------原来,随着版本升级,旧有的集成方式已被淘汰,而新的方式虽更规范,却也意味着对旧版本的不再兼容,真是既揭开了真相,也宣告了旧有支持路径的彻底终结。

二、解决方案

既然没有了现成的轮子,那咱们就撸起袖子自己造 一个。为了最大程度避免对现有业务代码进行伤筋动骨的改动,我们"造轮子"的核心思路是参照 Spring Boot 3.3 的实现范式 ,基于 OkHttp实现与 InfluxDB 的集成,从而保证与新框架及后续版本的兼容性。话不多说,直接上干货 O(∩_∩)O

  • pom.xml
XML 复制代码
<!-- InfluxDB v1 -->
<dependency>
    <groupId>org.influxdb</groupId>
    <artifactId>influxdb-java</artifactId>
    <version>2.22</version>
</dependency>
  • InfluxDB 属性配置类:InfluxDbProperties.java
java 复制代码
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * InfluxDB属性配置
 *
 * @Author Tommy
 * @Date 2026/3/25
 */
@ConfigurationProperties(prefix = "spring.influx")
@Data
public class InfluxDbProperties {

    /**
     * URL of the InfluxDB instance to which to connect.
     */
    private String url;

    /**
     * Login user.
     */
    private String user;

    /**
     * Login password.
     */
    private String password;

    /** 数据库 **/
    private String database;

    /** 保留策略 **/
    private String retentionPolicy;
}
  • InfluxDB 自动装配类:InfluxDbConfig.java
java 复制代码
import InfluxDbProperties;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.impl.InfluxDBImpl;
import org.influxdb.impl.InfluxDBMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * InfluxDB配置类
 *
 * @Author Tommy
 * @Date 2026/3/25
 */
@Configuration
@ConditionalOnClass(InfluxDB.class)
@EnableConfigurationProperties(InfluxDbProperties.class)
@ConditionalOnProperty("spring.influx.url")
@Slf4j
public class InfluxDbConfig {

    /**
     * InfluxDB初始化:参数配置
     */
    @Bean
    public InfluxDB influxDb(InfluxDbProperties properties) {
        // 从SpringBoot 3.4开始,移除了对InfluxDB的自动配置支持
        // 以下参照之前的SpringBoot支持方式,自行修改实现如下
        // 并在此基础上,支持设置默认连接的数据库 & 保留策略
        InfluxDB influxDb = new InfluxDBImpl(properties.getUrl(), properties.getUser(), properties.getPassword(), determineBuilder());
        influxDb.setDatabase(properties.getDatabase());
        influxDb.setRetentionPolicy(properties.getRetentionPolicy());
        return influxDb;
    }

    /**
     * 初始化InfluxDBMapper,面向POJO操作
     */
    @Bean
    public InfluxDBMapper influxDBMapper(InfluxDB influxDB) {
        log.info("InfluxDB数据库已连接,初始化完成. DB version: {}", influxDB.version());
        return new InfluxDBMapper(influxDB);
    }

    private static OkHttpClient.Builder determineBuilder() {
        return new OkHttpClient.Builder();
    }
}
  • yml配置
XML 复制代码
spring:
  influx:
    url: http://localhost:8086
    user: root
    password: 123456
    database: iot
    retention-policy: iot_10y_policy

完整代码实现如上,是不是很简单呢!只要知其然,又知其所以然,一切就 So Easy 啦!O(∩_∩)O

至此分享结束!

Enjoy It !!!

相关推荐
Java水解3 小时前
Spring Boot 消息队列与异步处理
spring boot·后端
深蓝轨迹6 小时前
黑马点评--达人探店模块
java·spring boot·redis
菜鸟程序员专写BUG6 小时前
SpringBoot 接口返回异常全集|JSON解析失败/响应乱码/状态码错误完美解决
spring boot·后端·json
希望永不加班6 小时前
SpringBoot 编写第一个 REST 接口(Get/Post/Put/Delete)
java·spring boot·后端·spring
vx-程序开发7 小时前
springboot智慧农业信息服务平台-计算机毕业设计源码65287
spring boot·后端·课程设计
小雷君7 小时前
SpringBoot 接口开发5个高频踩坑总结
java·spring boot·后端·面试
我真会写代码8 小时前
SpringBoot自动装配原理:告别繁琐配置,读懂底层逻辑
java·spring boot·mybatis
尽兴-8 小时前
Spring Boot 整合 Elasticsearch 8.x 实战总结(含三种实现方式 + 完整示例)
spring boot·elasticsearch·jenkins
张涛酱1074569 小时前
Jackson 严格解析:拒绝"温柔"的 JSON
spring boot·json