广告
返回顶部
首页 > 资讯 > 数据库 > Spring Boot Sample 024之spring-boot-data-influxdb
  • 821
分享到

Spring Boot Sample 024之spring-boot-data-influxdb

摘要

一、环境 idea 2020.1 jdk 1.8 Maven 二、目的 Spring Boot 通过整合influxdb GitHub地址: https://github.com/ouyushan/ouyushan-spring-boo


	Spring Boot Sample 024之spring-boot-data-influxdb
[数据库教程]

一、环境

二、目的

Spring Boot 通过整合influxdb

GitHub地址: https://github.com/ouyushan/ouyushan-spring-boot-samples

三、步骤

3.1、点击File -> New Project -> Spring Initializer,点击next 技术图片

3.2、在对应地方修改自己的项目信息

技术图片

3.3、选择Web依赖,选中Spring Web、Spring Boot Actuator。可以选择Spring Boot版本,本次默认为2.3.0,点击Next

技术图片

3.4、项目结构

技术图片

四、添加文件

技术图片

pom.xml文件



    4.0.0
    
        org.ouyushan
        ouyushan-spring-boot-samples
        0.0.1-SNAPSHOT
    
    org.ouyushan
    spring-boot-data-influxdb
    0.0.1-SNAPSHOT
    spring-boot-data-influxdb
    InfluxDB project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-WEB
        

        
            io.micrometer
            micrometer-reGIStry-influx
            runtime
        

        
            org.influxdb
            influxdb-java
            2.19
        

        
            org.projectlombok
            lombok
            1.18.12
            true
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
            org.hibernate.validator
            hibernate-validator
            6.1.5.Final
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


application.properties文件

spring:
  influx:
    url: Http://localhost:8086
    user: root
    passWord: ouyushan
    database: test
    retention_policy: default
    retention_policy_time: 30d


management:
  metrics:
    export:
      influx:
        enabled: true
        db: ouyushan
        uri: http://localhost:8086
        user: root
        password: ouyushan
        connect-timeout: 1s
        read-timeout: 10s
        auto-create-db: true
        step: 1m
        consistency: one
        compressed: true
        batch-size: 10000

InfluxDBProperties.java

package org.ouyushan.SpringBoot.data.influxdb.config;

import lombok.Data;
import org.hibernate.validator.constraints.URL;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import javax.validation.constraints.NotBlank;


@Configuration
@ConfigurationProperties(prefix = "spring.influx")
@Data
public class InfluxDBProperties {
    @URL
    private String url;
    @NotBlank
    private String user;
    @NotBlank
    private String password;
    @NotBlank
    private String database;
    @NotBlank
    private String retentionPolicy;
    @NotBlank
    private String retentionPolicyTime;

}

InfluxDBConfig.java

package org.ouyushan.springboot.data.influxdb.config;

import lombok.extern.slf4j.Slf4j;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;



@Configuration
@Slf4j
public class InfluxDBConfig {

    @Autowired
    private InfluxDBProperties influxDBProperties;


    @Bean
    public InfluxDBConnect getInfluxDBConnect() {
        InfluxDBConnect influxDB = new InfluxDBConnect(influxDBProperties.getUser(), influxDBProperties.getPassword(),
                influxDBProperties.getUrl(), influxDBProperties.getDatabase(), influxDBProperties.getRetentionPolicy(),
                influxDBProperties.getRetentionPolicyTime());

        influxDB.influxDbBuild();

        influxDB.createRetentionPolicy();
        log.info("init influxdb::[{}]", influxDBProperties);
        return influxDB;
    }

}

InfluxDBConnect.java

package org.ouyushan.springboot.data.influxdb.config;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;

import java.util.Map;
import java.util.concurrent.TimeUnit;


@Data
@Slf4j
public class InfluxDBConnect {
    
    private String user;
    private String password;
    private String url;
    public String database;
    
    private String retentionPolicy;
    
    private String retentionPolicyTime;

    
    private InfluxDB influxDB;

    public InfluxDBConnect(String user, String password, String url, String database, String retentionPolicy, String retentionPolicyTime) {
        this.user = user;
        this.password = password;
        this.url = url;
        this.database = database;
        // autogen默认的数据保存策略
        this.retentionPolicy = retentionPolicy == null || "".equals(retentionPolicy) ? "autogen" : retentionPolicy;
        this.retentionPolicyTime = retentionPolicyTime == null || "".equals(retentionPolicy) ? "30d" : retentionPolicyTime;
        this.influxDB = influxDbBuild();
    }

    
    public InfluxDB influxDbBuild() {
        if (influxDB == null) {
            influxDB = InfluxDBFactory.connect(url, user, password);
            influxDB.query(new Query("CREATE DATABASE " + database));
            influxDB.setDatabase(database);
        }
        return influxDB;
    }

    
    public void createRetentionPolicy() {
        String command = String.fORMat("CREATE RETENTION POLICY "%s" ON "%s" DURATION %s REPLICATION %s DEFAULT",
                retentionPolicy, database, retentionPolicyTime, 1);
        this.query(command);
    }

    
    public QueryResult query(String command) {
        return influxDB.query(new Query(command, database));
    }

    
    public void insert(String measurement, Map tags, Map fields) {
        Point.Builder builder = Point.measurement(measurement);
        // 纳秒时会出现异常信息:partial write: points beyond retention policy dropped=1
        // builder.time(System.nanoTime(), TimeUnit.NANOSECONDS);
        builder.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
        builder.tag(tags);
        builder.fields(fields);

        log.info("influxDB insert data:[{}]", builder.build().toString());
        influxDB.write(database, "", builder.build());
    }
}

五、测试

SpringBootDataInfluxdbApplicationTests.java

package org.ouyushan.springboot.data.influxdb;

import org.influxdb.dto.QueryResult;
import org.junit.jupiter.api.Test;
import org.ouyushan.spring.boot.data.influxdb.config.InfluxDBConnect;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest
class SpringBootDataInfluxdbApplicationTests {

    @Resource
    InfluxDBConnect influxDBConnect;

    @Test
    public void testInsert() {
        Map tagsMap = new HashMap<>();
        Map fieldsMap = new HashMap<>();
        System.out.println("influxDB start time :" + System.currentTimeMillis());
        int i = 0;
        for (; ; ) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            tagsMap.put("user_id", String.valueOf(i % 10));
            tagsMap.put("url", "http://www.baidu.com");
            tagsMap.put("service_method", "testInsert" + (i % 5));
            fieldsMap.put("count", i % 5);
            influxDBConnect.insert("usage", tagsMap, fieldsMap);
            i++;
        }
    }

    @Test
    public void testQuery() {
        QueryResult queryResult = influxDBConnect.query("select * from usage");
        queryResult.getResults().stream().forEach(result -> System.out.println(result.getSeries()));
    }


}

Spring Boot Sample 024之spring-boot-data-influxdb

原文地址:https://www.cnblogs.com/ouyushan/p/13974710.html

您可能感兴趣的文档:

--结束END--

本文标题: Spring Boot Sample 024之spring-boot-data-influxdb

本文链接: https://www.lsjlt.com/news/7979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作