SpringBoot 整合 InfluxDB
InfluxDB 是一个开源的时序数据库,专门用于存储和分析时间序列数据。它具有高压缩比、高并发写入和低延时查询的特点,非常适合用于物联网、金融、IT和互联网等行业的数据监测。
在 SpringBoot 中整合 InfluxDB
添加依赖
首先,在 SpringBoot 项目的 pom.xml 文件中添加 InfluxDB 的依赖:
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.14</version>
</dependency>
配置 InfluxDB
在 application.properties 文件中添加 InfluxDB 的相关配置:
spring.influx.url=http://localhost:8086
spring.influx.user=admin
spring.influx.password=
spring.influx.database=weiz_test
读取配置文件
创建 InfluxDBConfig 类,用于读取 InfluxDB 的配置:
@Configuration
public class InfluxDBConfig {
@Value("${spring.influx.user}")
public String userName;
@Value("${spring.influx.password}")
public String password;
@Value("${spring.influx.url}")
public String url;
@Value("${spring.influx.database}")
public String database;
}
数据库操作类
创建 InfluxDBService 类,负责数据库的初始化和增删改查操作:
@Service
public class InfluxDBService {
@Autowired
private InfluxDBConfig influxDBConfig;
private InfluxDB influxDB;
@PostConstruct
public void initInfluxDb() {
this.influxDB = InfluxDBFactory.connect(influxDBConfig.url, influxDBConfig.userName, influxDBConfig.password);
this.influxDB.setDatabase(influxDBConfig.database);
}
public void insert(String measurement, Map<String, String> tags, Map<String, Object> fields) {
Point.Builder builder = Point.measurement(measurement);
builder.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
builder.tag(tags);
builder.fields(fields);
influxDB.write(influxDBConfig.database, "", builder.build());
}
public QueryResult query(String command) {
return influxDB.query(new Query(command, influxDBConfig.database));
}
}
测试验证
编写单元测试,验证数据的增删改查操作是否成功:
@SpringBootTest
class Example01ApplicationTests {
@Autowired
private InfluxDBService influxDBService;
@Test
public void testSave() {
String measurement = "host_cpu_usage_total";
Map<String, String> tags = new HashMap<>();
tags.put("host_name", "host2");
tags.put("cpu_core", "core0");
Map<String, Object> fields = new HashMap<>();
fields.put("cpu_usage", 0.22);
fields.put("cpu_idle", 0.56);
influxDBService.insert(measurement, tags, fields);
}
@Test
public void testGetdata() {
String command = "select * from host_cpu_usage_total";
QueryResult queryResult = influxDBService.query(command);
List<Map<String, Object>> result = influxDBService.queryResultProcess(queryResult);
for (Map<String, Object> map : result) {
System.out.println("time:" + map.get("time") + " host_name:" + map.get("host_name") + " cpu_core:" + map.get("cpu_core") + " cpu_usage:" + map.get("cpu_usage") + " cpu_idle:" + map.get("cpu_idle"));
}
}
}
通过上述步骤,我们可以在 SpringBoot 项目中成功整合 InfluxDB,实现数据的增删改查操作。