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

相关推荐
xiaoqiMikko2 小时前
Dependabot 面板全绿,不代表你的 Tomcat 没洞
java·spring boot
摇滚侠2 小时前
SpringBoot 官网 阅读笔记 启用生产就绪功能 端点
spring boot·笔记·后端
evans在进步3 小时前
HashMap 为什么线程不安全?ConcurrentHashMap 如何解决?
java·spring boot·spring
小林敲代码77888 小时前
Spring Boot 3 升级踩坑:aj-captcha 行为验证码底图加载失效
java·spring boot·后端
程序员阿明8 小时前
spring boot3访问resources下的文件,使得在浏览器url中可以直接访问
java·spring boot·后端
霸道流氓气质9 小时前
SpringBoot中使用OAuth2 认证与 JWT Token — 概念、原理与实践
java·spring boot·后端
snow@li9 小时前
Vue Axios封装与SpringBoot Payload封装全景关联分析(前后端数据交互底层闭环)
前端·vue.js·spring boot
用户31268748772010 小时前
Spring Boot 日志体系到底怎么加载的?从 Logback 到 MDC 的全链路拆解
spring boot
paopaokaka_luck10 小时前
基于springboot3+vue3的云南本土影视文旅推荐平台(协同过滤算法、Echarts图形化分析)
前端·spring boot·学习·算法·echarts·mybatis
snow@li11 小时前
SpringBoot:依赖注入(DI)全景深度梳理与实战分析/@Autowired、@Resource、@Qualifier
java·spring boot·rpc