1.InfluxDB实例

1.1 依赖及配置

<dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java</artifactId><version>2.15</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
spring:influx:url: http://tcloud:18088user: adminpassword: admindatabase: mydbretentionPolicy: defaultretentionPolicyTime: 30d

1.2 代码实现

配置类:

@Configuration
public class InfluxDatabaseConfig {@Value("${spring.influx.url}")public String url;@Value("${spring.influx.user}")public String userName;@Value("${spring.influx.password}")public String password;@Value("${spring.influx.database}")public String database;@Value("${spring.influx.retentionPolicy}")public String retentionPolicy;@Value("${spring.influx.retentionPolicyTime}")public String retentionPolicyTime;
}

工具类:

@Slf4j
@Component
public class InfluxDatabaseUtil {private String database;private String retentionPolicy;private String retentionPolicyTime;private InfluxDB influxdb;@Autowiredprivate InfluxDatabaseConfig influxDatabaseConfig;@PostConstructprivate void init() {// 保存策略if (StringUtils.isEmpty(influxDatabaseConfig.retentionPolicy)) {this.retentionPolicy = "autogen";} else {this.retentionPolicy = influxDatabaseConfig.retentionPolicy;}// 数据保存策略中数据保存时间if (StringUtils.isEmpty(influxDatabaseConfig.retentionPolicyTime)) {this.retentionPolicyTime = "30d";} else {this.retentionPolicyTime = influxDatabaseConfig.retentionPolicyTime;}if (StringUtils.isEmpty(influxDatabaseConfig.database)) {// 创建数据库并赋值System.out.println("创建数据库!");}this.database = influxDatabaseConfig.database;// 初始化 InfluxDB 实例initInfluxDatabase();// 数据库设置保存策略createRetentionPolicy();}/*** 初始化数据库连接*/private void initInfluxDatabase() {influxdb = InfluxDBFactory.connect(influxDatabaseConfig.url, influxDatabaseConfig.userName, influxDatabaseConfig.password);influxdb.setDatabase(database);}/*** 设置数据保存策略* default 策略名* database 数据库名* 30d 数据保存时限30天* 1 副本个数为1* 结尾 DEFAULT 表示 设为默认的策略*/private void createRetentionPolicy() {String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",retentionPolicy, database, retentionPolicyTime, 1);this.query(command);}/*** 查询** @param command 查询语句* @return 查询结果*/public QueryResult query(String command) {return influxdb.query(new Query(command, database));}/*** 插入** @param measurement 表* @param tags        标签* @param fields      字段*/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);log.info("influxDB insert data:[{}]", builder.build().toString());influxdb.write(database, "", builder.build());}
}

对象封装:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Usage {private String time;private String serviceMethod;private String userId;private Integer count;private String url;
}

测试类:

@SpringBootTest
class InfluxDatabaseApplicationTests {@Autowiredprivate InfluxDatabaseUtil influxDatabaseUtil;@Testvoid testInsert() throws InterruptedException {Map<String, String> tagsMap = new HashMap<>();Map<String, Object> fieldsMap = new HashMap<>();System.out.println("influxDB start time :" + System.currentTimeMillis());int i = 0;do {Thread.sleep(100);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);influxDatabaseUtil.insert("usage", tagsMap, fieldsMap);i++;} while (i < 50);}@Testvoid testQuery() {QueryResult query = influxDatabaseUtil.query("select * from usage limit 10");ArrayList<Object> lists = new ArrayList<>();query.getResults().forEach(result -> {result.getSeries().forEach(serie -> {List<List<Object>> values = serie.getValues();List<String> columns = serie.getColumns();lists.addAll(getQueryData(columns, values));});});System.out.println(lists.toString());}private List<Usage> getQueryData(List<String> columns, List<List<Object>> values) {List<Usage> lists = new ArrayList<>();for (List<Object> list : values) {Usage info = new Usage();BeanWrapperImpl bean = new BeanWrapperImpl(info);for (int i = 0; i < list.size(); i++) {String propertyName = setColumns(columns.get(i));// 字段名Object value = list.get(i);// 相应字段值bean.setPropertyValue(propertyName, value);}lists.add(info);}return lists;}/*** 转义字段 ***/private String setColumns(String column) {String[] cols = column.split("_");StringBuffer sb = new StringBuffer();for (int i = 0; i < cols.length; i++) {String col = cols[i].toLowerCase();if (i != 0) {String start = col.substring(0, 1).toUpperCase();String end = col.substring(1).toLowerCase();col = start + end;}sb.append(col);}return sb.toString();}
}

2.Feign接口调用InfluxDB API

2.1 依赖及配置

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version>
</dependency>
ribbon:ReadTimeout: 5000ConnectTimeout: 5000

2.2 代码实现

Use the InfluxDB API 文档有详细说明,以下是feign接口:

@FeignClient(name = "influxDbApi", url = "${spring.influx.url}")
public interface InfluxDbApi {/*** 查询数据库** @param q  查询语句* @param db 数据库* @param u  用户名* @param p  密码* @return 查询结果* @throws Exception 可能出现的异常*/@PostMapping("/query")String queryInfo(@RequestParam String db, @RequestParam String u, @RequestParam String p, @RequestParam String q) throws Exception;
}

调用测试类:

@Component
public class ApiTesting {@Autowiredprivate InfluxDbApi influxDbApi;String test() throws Exception {/* Map<String, Object> param = new HashMap<>(8);param.put("q","CREATE DATABASE testDB");*/return influxDbApi.queryInfo("mydb", "admin", "admin", "select * from usage");}
}

测试接口:

@RestController
@Slf4j
public class ApiController {@Resource(name = "apiTesting")private ApiTesting apiTesting;@PostMapping("/test")public String get() throws Exception {log.info("------test------");return apiTesting.test();}
}

InfluxData【付诸实践 01】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享相关推荐

  1. SpringBoot集成mysql-connector-java数据库驱动

    官方文档:https://dev.mysql.com/doc/connector-j/8.0/en/ MySQL使用MySQL Connector/J 用Java编程语言开发的客户端应用程序提供连接, ...

  2. 【SpringBoot新手篇】SpringBoot 集成H2数据库

    [SpringBoot新手篇]SpringBoot 集成H2数据库 概述h2数据库 SpringBoot整合测试 pom yml Embedded 嵌入式 Remote (client/server) ...

  3. SpringBoot集成H2数据库

    SpringBoot集成H2数据库 背景 H2数据库是一个Java编写的关系型数据库,它可以被嵌入到Java应用程序中使用,或者作为一个单独的数据库服务器运行.它支持内存模式,所以在单元测试的时候,使 ...

  4. 【SpringBoot高级篇】SpringBoot集成MongDB数据库

    [SpringBoot高级篇]SpringBoot集成MongDB数据库 MongoDB是什么 ? 主要特点 MongoDB管理 工具 MongoDB 基本概念 数据库 文档(Document) 集合 ...

  5. springboot租房管理系统源码分享

    项目描述 springboot租房管理系统源码分享,前端使用vue.js,后端使用springboot+hibernate. 运行环境 jdk8+tomcat8+mysql5.7+IntelliJ I ...

  6. 基于java框架的图书分享系统的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java框架的图书分享系统的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java框架的图书分享系统的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库 ...

  7. 教师信息管理系统源码(Access数据库)源码分享!

    分享一套C# Winform 教师信息管理系统源码(Access数据库)源码编号:MF00701 需要源码学习可私信我获取. 源码描述: 学校教师管理系统主要功能:  1)信息管理: 教师信息管理,家 ...

  8. 【024】Vue+Springboot+mysql员工考勤管理系统(多角色登录、请假、打卡)(含源码、数据库、运行教程、实验报告)

    前排提示:项目源码已放在文末 基于Vue+Springboot+mysql员工考勤管理系统(多角色登录.请假.打卡) 开发环境:Springboot+Mysql+Vue+Nodejs+Maven+JD ...

  9. springboot采用协同过滤算法的家政服务平台的设计与实现毕业设计源码260839

    Springboot家政服务平台 摘  要 协同过滤算法是一种较为著名和常用的推荐算法,它基于对用户历史行为数据的挖掘发现用户的喜好偏向,并预测用户可能喜好的产品进行推荐.基于协同过滤算法的家政服务平 ...

最新文章

  1. 中国10大最震撼的无人工厂,你吃的用的都是这么来的!
  2. 案例驱动python编程入门-事件驱动程序
  3. maven学习(中)- 私服nexus搭建
  4. Android 清除png图片的白色背景
  5. 《天天数学》连载04:一月四日
  6. 直播电商要处理好五个关系
  7. elementui el-input输入数字为整数的验证
  8. shell脚本之安装ansible(centos7环境)
  9. promise.prototype.catch()
  10. 【python】面向对象编程
  11. 威纶通触摸屏可以解密吗_【实例】西门子PLC变频器和触摸屏综合应用
  12. 算法第四版- 4.3
  13. python熊猫弹幕_python奇闻杂技05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)...
  14. 基础教学 | 什么是负载均衡?
  15. 配置Linaro toolchain交叉编译工具
  16. Bootstrap 折叠(Collapse)插件
  17. android搜索app下载地址,如何找出APP的URL Scheme
  18. 手游联运平台是怎样开发的?
  19. 深度学习入门 | Self-attentionRNNLSTM
  20. 测试狗:冷冻电镜是什么?冷冻电镜技术的应用

热门文章

  1. ajax 同步和异步
  2. 第十节 字符串指针变量与字符数组的区别(十一)
  3. MOSS Content Types 概述
  4. 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
  5. 人工神经网络_用人工神经网络控制猴子大脑,MIT科学家做到了
  6. 我对“POST和GET的区别”的理解
  7. mysql配置读写分离无效_MySQL数据库的同步配置+MySql 读写分离
  8. 计算机系统层次中应用语言级,计算机系统的多级层次结构
  9. matlab 叠加 area,[转载]matlab学习——area填色图
  10. 华为vrrp默认优先级_华为的VRRP怎么配置