
近年来,InfluxDB 的迭代进程显著加速,现已进化至 3.x 版本。然而,在实际应用场景中,用户群体更倾向于 使用 1.x 版本(尤其是 1.7 或 1.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 !!!