SpringBoot 整合 InfluxDB

4 阅读1分钟

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,实现数据的增删改查操作。