`

spring boot使用InfluxDB超简单三步搞定

阅读更多

InfluxDB和IotDB介绍与性能对比

Centos MacBook Docker离线安装InfluxDB超级简单

maven依赖InfluxDB

  1. <dependency>
  2. <groupId>org.influxdb</groupId>
  3. <artifactId>influxdb-java</artifactId>
  4. <version>2.14</version>
  5. </dependency>

InfluxDB配置

  1. spring:
  2. influx:
  3. url: http://192.168.1.5:8086
  4. user: admin
  5. password: abcd_2021
  6. database: demo

InfluxDB配置类

  1. package com.beyond.data.config;
  2. import org.influxdb.InfluxDB;
  3. import org.influxdb.InfluxDBFactory;
  4. import org.influxdb.dto.BatchPoints;
  5. import org.influxdb.dto.Point;
  6. import org.influxdb.dto.Query;
  7. import org.influxdb.dto.QueryResult;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.stereotype.Component;
  11. import java.util.ArrayList;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.concurrent.TimeUnit;
  16. @Component
  17. @Configuration
  18. publicclassInfluxDBConfig{
  19. @Value("${spring.influx.user}")
  20. privateString userName;
  21. @Value("${spring.influx.password}")
  22. privateString password;
  23. @Value("${spring.influx.url}")
  24. privateString url;
  25. //数据库
  26. @Value("${spring.influx.database}")
  27. privateString database;
  28. //保留策略
  29. privateString retentionPolicy;
  30. privateInfluxDB influxDB;
  31. publicInfluxDBConfig(){}
  32. publicInfluxDBConfig(String userName,String password,String url,String database){
  33. this.userName = userName;
  34. this.password = password;
  35. this.url = url;
  36. this.database = database;
  37. // autogen默认的数据保存策略
  38. this.retentionPolicy = retentionPolicy ==null||"".equals(retentionPolicy)?"autogen": retentionPolicy;
  39. this.influxDB = influxDbBuild();
  40. }
  41. /**
  42. * 设置数据保存策略 defalut 策略名 /database 数据库名/ 30d 数据保存时限30天/ 1 副本个数为1/ 结尾DEFAULT
  43. * 表示 设为默认的策略
  44. */
  45. publicvoid createRetentionPolicy(){
  46. String command =String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
  47. "defalut", database,"30d",1);
  48. this.query(command);
  49. }
  50. /**
  51. * 连接时序数据库;获得InfluxDB
  52. **/
  53. privateInfluxDB influxDbBuild(){
  54. if(influxDB ==null){
  55. influxDB =InfluxDBFactory.connect(url, userName, password);
  56. influxDB.setDatabase(database);
  57. }
  58. return influxDB;
  59. }
  60. /**
  61. * 插入
  62. * @param measurement 表
  63. * @param tags 标签
  64. * @param fields 字段
  65. */
  66. publicvoid insert(String measurement,Map<String,String> tags,Map<String,Object> fields){
  67. influxDbBuild();
  68. Point.Builder builder =Point.measurement(measurement);
  69. builder.time(System.currentTimeMillis(),TimeUnit.MILLISECONDS);
  70. builder.tag(tags);
  71. builder.fields(fields);
  72. influxDB.write(database,"", builder.build());
  73. }
  74. /**
  75. * @desc 插入,带时间time
  76. * @date 2021/3/27
  77. *@param measurement
  78. *@param time
  79. *@param tags
  80. *@param fields
  81. * @return void
  82. */
  83. publicvoid insert(String measurement,long time,Map<String,String> tags,Map<String,Object> fields){
  84. influxDbBuild();
  85. Point.Builder builder =Point.measurement(measurement);
  86. builder.time(time,TimeUnit.MILLISECONDS);
  87. builder.tag(tags);
  88. builder.fields(fields);
  89. influxDB.write(database,"", builder.build());
  90. }
  91. /**
  92. * @desc influxDB开启UDP功能,默认端口:8089,默认数据库:udp,没提供代码传数据库功能接口
  93. * @date 2021/3/13
  94. *@param measurement
  95. *@param time
  96. *@param tags
  97. *@param fields
  98. * @return void
  99. */
  100. publicvoid insertUDP(String measurement,long time,Map<String,String> tags,Map<String,Object> fields){
  101. influxDbBuild();
  102. Point.Builder builder =Point.measurement(measurement);
  103. builder.time(time,TimeUnit.MILLISECONDS);
  104. builder.tag(tags);
  105. builder.fields(fields);
  106. int udpPort =8089;
  107. influxDB.write(udpPort, builder.build());
  108. }
  109. /**
  110. * 查询
  111. * @param command 查询语句
  112. * @return
  113. */
  114. publicQueryResult query(String command){
  115. influxDbBuild();
  116. return influxDB.query(newQuery(command, database));
  117. }
  118. /**
  119. * @desc 查询结果处理
  120. * @date 2021/5/12
  121. *@param queryResult
  122. */
  123. publicList<Map<String,Object>> queryResultProcess(QueryResult queryResult){
  124. List<Map<String,Object>> mapList =newArrayList<>();
  125. List<QueryResult.Result> resultList = queryResult.getResults();
  126. //把查询出的结果集转换成对应的实体对象,聚合成list
  127. for(QueryResult.Result query : resultList){
  128. List<QueryResult.Series> seriesList = query.getSeries();
  129. if(seriesList !=null&& seriesList.size()!=0){
  130. for(QueryResult.Series series : seriesList){
  131. List<String> columns = series.getColumns();
  132. String[] keys = columns.toArray(newString[columns.size()]);
  133. List<List<Object>> values = series.getValues();
  134. if(values !=null&& values.size()!=0){
  135. for(List<Object> value : values){
  136. Map<String,Object> map =newHashMap(keys.length);
  137. for(int i =0; i < keys.length; i++){
  138. map.put(keys[i], value.get(i));
  139. }
  140. mapList.add(map);
  141. }
  142. }
  143. }
  144. }
  145. }
  146. return mapList;
  147. }
  148. /**
  149. * @desc InfluxDB 查询 count总条数
  150. * @date 2021/4/8
  151. */
  152. publiclong countResultProcess(QueryResult queryResult){
  153. long count =0;
  154. List<Map<String,Object>> list = queryResultProcess(queryResult);
  155. if(list !=null&& list.size()!=0){
  156. Map<String,Object> map = list.get(0);
  157. double num =(Double)map.get("count");
  158. count =newDouble(num).longValue();
  159. }
  160. return count;
  161. }
  162. /**
  163. * 查询
  164. * @param dbName 创建数据库
  165. * @return
  166. */
  167. publicvoid createDB(String dbName){
  168. influxDbBuild();
  169. influxDB.createDatabase(dbName);
  170. }
  171. /**
  172. * 批量写入测点
  173. *
  174. * @param batchPoints
  175. */
  176. publicvoid batchInsert(BatchPoints batchPoints){
  177. influxDbBuild();
  178. influxDB.write(batchPoints);
  179. }
  180. /**
  181. * 批量写入数据
  182. *
  183. * @param database
  184. * 数据库
  185. * @param retentionPolicy
  186. * 保存策略
  187. * @param consistency
  188. * 一致性
  189. * @param records
  190. * 要保存的数据(调用BatchPoints.lineProtocol()可得到一条record)
  191. */
  192. publicvoid batchInsert(finalString database,finalString retentionPolicy,
  193. finalInfluxDB.ConsistencyLevel consistency,finalList<String> records){
  194. influxDbBuild();
  195. influxDB.write(database, retentionPolicy, consistency, records);
  196. }
  197. /**
  198. * @desc 批量写入数据
  199. * @date 2021/3/19
  200. *@param consistency
  201. *@param records
  202. */
  203. publicvoid batchInsert(finalInfluxDB.ConsistencyLevel consistency,finalList<String> records){
  204. influxDbBuild();
  205. influxDB.write(database,"", consistency, records);
  206. }
  207. publicString getUserName(){
  208. return userName;
  209. }
  210. publicvoid setUserName(String userName){
  211. this.userName = userName;
  212. }
  213. publicString getPassword(){
  214. return password;
  215. }
  216. publicvoid setPassword(String password){
  217. this.password = password;
  218. }
  219. publicString getUrl(){
  220. return url;
  221. }
  222. publicvoid setUrl(String url){
  223. this.url = url;
  224. }
  225. publicString getDatabase(){
  226. return database;
  227. }
  228. publicvoid setDatabase(String database){
  229. this.database = database;
  230. }
  231. publicString getRetentionPolicy(){
  232. return retentionPolicy;
  233. }
  234. publicvoid setRetentionPolicy(String retentionPolicy){
  235. this.retentionPolicy = retentionPolicy;
  236. }
  237. publicInfluxDB getInfluxDB(){
  238. return influxDB;
  239. }
  240. publicvoid setInfluxDB(InfluxDB influxDB){
  241. this.influxDB = influxDB;
  242. }
  243. }

调用

  1. @Autowired
  2. privateInfluxDBConfig influxDBConfig;
  3. ......
  4. influxDBConfig.insert(measurement, tags, fields);

<audio controls="controls" style="display: none;"></audio>

分享到:
评论

相关推荐

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    LEARNING SPRING BOOT 3.0 - THIRD EDITION

    《Learning Spring Boot 3.0 - 第三版》是一本专为Java和Spring开发者准备的指南,由Greg L. Turnquist撰写。本书旨在简化生产级应用程序的开发过程,特别是利用Spring Boot 3.0框架。Spring Boot作为Spring生态系统...

    spring boot资料以及项目

    这些内容会详细介绍如何创建Spring Boot项目、如何配置Spring Boot、如何使用Spring Initializr初始化项目、以及如何使用Maven或Gradle构建工具。Spring Boot的配置文件(application.properties或application.yml)...

    learning spring boot 2.0

    标签“spring boot”、“java”、“spring”指出了本书的三个关键词:Spring Boot本身,以及Spring Boot开发所依赖的Java语言和Spring框架。Java作为一门广泛使用的编程语言,是编写Spring Boot应用的主要语言。而...

    2023最新《Spring Boot基础教程》

    Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档 Spring Boot 2.x基础教程:JSR-303实现请求参数校验 Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解 Spring Boot 2.x基础教程:Swagger...

    Spring Boot 2.5.0简单学习pdf资料

    使用 Spring Boot 2.5.0 创建项目非常简单,只需要使用 Spring Initializr 工具,然后选择需要的依赖项,例如 Spring Web、Spring Data JPA、MyBatis 等。 依赖项管理 在 Spring Boot 2.5.0 中,依赖项管理是通过 ...

    Spring Boot 2 Recipes

    使用微服务进行Web服务开发并与Spring Boot应用程序集成 无缝添加持久性和数据层,使您的Spring Boot Web应用程序做得更多 使用Spring Boot集成企业服务以创建更复杂的Java应用程序 本书适用于经验丰富的Java和...

    Spring Boot讲义.pdf

    在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...

    十分钟上手spring boot

    ##### 三、使用Spring Boot **13. 构建系统** - **13.1. 依赖管理** - Spring Boot提供了默认的依赖版本管理,避免了版本冲突问题。 - **13.2. Maven** - **13.2.1. 继承starter parent** - 使用starter parent...

    Spring boot 示例 官方 Demo

    spring-boot-helloWorld:spring-boot的helloWorld版本 spring-boot-mybaits-annotation:注解版本 spring-boot-mybaits-xml:xml配置版本 spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决...

    Spring Boot实战派(源码)

    《Spring Boot实战派》源码提供了丰富的学习材料,旨在帮助开发者深入理解并熟练掌握Spring Boot这一流行的Java后端开发框架。Spring Boot简化了Spring应用程序的初始设置和配置,使得开发人员能够快速构建可运行的...

    最新Spring Boot Admin 官方参考指南-中文版-2.x

    Spring Boot Admin提供了丰富的API和事件监听机制,使得二次开发变得相对简单。 总的来说,Spring Boot Admin是一个强大的工具,它极大地简化了Spring Boot应用的管理和监控。通过其直观的UI和与Spring Boot ...

    Spring-Boot-Reference-Guide, Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》.zip

    1. 快速起步:Spring Boot通过“起步依赖”(Starter POMs)使得添加所需功能变得简单,如Web、数据访问、安全等。 2. 自动配置:基于条件注解的自动配置,能根据项目中的类和配置文件自动设置Bean。 3. 内嵌式...

    Spring Boot 2.X 实战教程.pdf

    本课程内容包括Spring简介、Spring Boot简介、安装JDK、安装Maven、第一个Spring Boot程序(使用Spring Initializr构建、Spring Boot代码讲解、安装Notepad++)、构建系统、代码、配置、三种方式运行程序、安装...

    Spring Boot 2 Cookbook 第二版

    《Spring Boot 2 Cookbook 第二版》是一本针对Java开发者极具价值的开发指南,它深入浅出地介绍了Spring Boot 2这一强大框架的使用方法。Spring Boot是Spring框架的一个子项目,旨在简化Java应用程序的初始搭建以及...

    Spring Boot 教程、技术栈示例代码,快速简单上手教程。

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、RabbitMQ、Quartz 等,使得开发者可以“零配置”地启动项目,...

    使用 Spring Boot 快速构建 Spring 框架应用

    例如,在提供的代码清单 1 中,可以看到如何定义一个简单的 Spring Boot 应用的 POM 文件,其中指定了 Spring Boot 的版本和 `spring-boot-starter-web` 依赖。 通过这种方式,Spring Boot 实现了快速构建和运行 ...

    Spring Boot 3 中文文档

    所以,我们花了一点点时间,整理,翻译出了全网最新,质量最高的 Spring Boot 3 中文文档。我们使用了 Deepl AI 翻译,并且对翻译后的内容进行人工逐行校验,从 java 开发者的角度对内容进行优化,保留了一些原汁...

    《Vue Spring Boot前后端分离开发实战》源码Vue+Spring Boot前后端分离开发实战教学课件(PPT)

    在现代Web应用开发中,Vue.js和Spring Boot的结合已经成为了一种常见的前后端分离架构模式。这本《Vue Spring Boot前后端分离开发实战》的源码提供了深入学习和实践这一技术栈的机会。以下是对其中涉及知识点的详细...

    Spring Boot 进阶笔记.pdf

    在第三步中,选择自己所需的依赖、Spring Boot 的版本,选择 WEB 开发的所需的 starter。最后,指定项目的名称和路径,即可完成项目的创建。 在创建成功的项目中,有一个 DemoApplication 是项目的启动类,里面有一...

Global site tag (gtag.js) - Google Analytics