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 !!!

相关推荐
TDengine (老段)4 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
jameslogo9 小时前
如何用RocketMQTemplate发送事务消息
java·spring boot·rocketmq
无关868810 小时前
Spring Boot 项目标准化部署打包实战
java·spring boot·后端
jay神10 小时前
基于微信小程序课外创新实践学分认定系统
java·spring boot·小程序·vue·毕业设计
阿丰资源11 小时前
基于Spring Boot的酒店客房管理系统
java·spring boot·后端
zzqssliu11 小时前
SpringBoot框架搭建跨境独立站|Taocarts代购系统订单模块深度开发
java·spring boot·后端
武子康12 小时前
Java-219 RocketMQ Spring Boot 集成指南:生产者与消费者实战
java·spring boot·分布式·kafka·消息队列·rocketmq·java-rocketmq
想学习java初学者12 小时前
SpringBoot整合GS1编码解码
java·spring boot·后端
i220818 Faiz Ul13 小时前
智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧养老平台