SpringBoot|SpringBoot 2 集成时序数据库 InfluxDB 的正确姿势
版本
- SpringBoot 2.5.7
- InfluxDB 1.8
时序数据
。集成之前先对
InfluxDB
中的一些概念跟传统的 MySQL 做下对应:MySQL | InfluxDB |
---|---|
Database | Database |
Table | Measurement |
Column | Field |
- Tag:类似 Field,但 Field 不会被索引,Tag 会
- Point:对应一条数据
- Series:一条数据中所有 Tag 数据的键值对
AutoConfigure
相关配置,直接在项目 pom.xml
中添加依赖即可,不用写 version
org.influxdb
influxdb-java
驱动适用于 InfluxDB 1.x 版本,要注意版本对应,InfluxDB 2.x 版本驱动坐标换了,SpringBoot 中还未集成,如果需要可以看官方文档手动集成
【SpringBoot|SpringBoot 2 集成时序数据库 InfluxDB 的正确姿势】然后在
application.yml
中配置连接信息spring:
influx:
url: http://127.0.0.1:8086
user: ml
password: 56235623
由于 SpringBoot 中已有针对 InfluxDB Bean 的自动装配配置,在检测到项目中配置了 influx 配置后就会自动装配,所以在代码中直接注入 Bean 就好
@RequiredArgsConstructor
class TestService {
private final InfluxDB influxDB;
public void test() {
// 先构造 Point 对象
Point point = Point.measurement("position")
.tag("location", positionMqttVO.getAssetId().toString())
.addField("lng", positionMqttVO.getLng())
.addField("lat", positionMqttVO.getLat())
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.build();
// 写入
influxDB
.setDatabase("ame")
.write(point);
}
}
此时如果直接启动项目,会报一个错误提示
Caused by: java.lang.NoSuchFieldError: Companion
at okhttp3.internal.Util.(Util.kt:70) ~[okhttp-4.9.3.jar:na]
at okhttp3.internal.concurrent.TaskRunner.(TaskRunner.kt:309) ~[okhttp-4.9.3.jar:na]
at okhttp3.ConnectionPool.(ConnectionPool.kt:41) ~[okhttp-4.9.3.jar:na]
at okhttp3.ConnectionPool.(ConnectionPool.kt:47) ~[okhttp-4.9.3.jar:na]
at okhttp3.OkHttpClient$Builder.(OkHttpClient.kt:471) ~[okhttp-4.9.3.jar:na]
at org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration.determineBuilder(InfluxDbAutoConfiguration.java:60) ~[spring-boot-autoconfigure-2.5.7.jar:2.5.7]
at org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration.influxDb(InfluxDbAutoConfiguration.java:51) ~[spring-boot-autoconfigure-2.5.7.jar:2.5.7]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.13.jar:5.3.13]
... 65 common frames omitted
文章图片
通过查看依赖树(
mvn dependency:tree -U
)可知这是由于 InfluxDB 驱动中集成的 OKHttp 版本太旧导致的,我们需要排除依赖并引入最新的 OKhttp
org.influxdb
influxdb-java
com.squareup.okhttp3
okhttp
com.squareup.okhttp3
logging-interceptor
com.squareup.okhttp3
okhttp
4.9.3
com.squareup.okhttp3
logging-interceptor
4.9.3
至此再启动即可正常运行
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- Spring集成|Spring集成 Mina
- springboot使用redis缓存
- Dubbo引用服务
- springboot整合数据库连接池-->druid
- SpringBoot中YAML语法及几个注意点说明
- springboot结合redis实现搜索栏热搜功能及文字过滤