1.声明

当前内容主要为使用java方式实现和InfluxDB执行添加数据和查询数据操作

  1. FluxClient方式,需要在配置文件中开启
  2. InfluxDBClient方式

2.基本pom依赖

<dependency>
	<groupId>com.influxdb</groupId>
	<artifactId>influxdb-client-java</artifactId>
	<version>1.7.0</version>
</dependency>
<dependency>
	<groupId>com.influxdb</groupId>
	<artifactId>influxdb-client-flux</artifactId>
	<version>1.8.0</version>
</dependency>

上面一个是InfluxDBClient的包一个是FluxClient的包,但是FluxClient的包依赖InfluxDBClient的包

3.开启InfluxDB的Flux功能

1.修改配置文件:位于etc/influxdb/influxdb.conf文件

influxdb-java influxdb-java统计查询_influxdb-java


主要为修改数据存储地址

influxdb-java influxdb-java统计查询_数据_02


开启flux功能

2.启动时加载配置文件:

./influxd  -config /home/hy/influxdb-1.8.4-1/etc/influxdb/influxdb.conf

此时才是使用配置文件,否则使用默认的配置!

4.使用java方式访问

1.FluxClient方式实现查询(只能执行查询操作)

/**
	 * 
	 * @author hy
	 * @createTime 2021-03-14 11:59:48
	 * @description 使用Flux方式查询数据
	 *
	 */
	public static void queryExampleUsingFluxClient() {
		FluxClient fluxClient = FluxClientFactory.create("http://192.168.1.101:8086/");
		Boolean ping = fluxClient.ping();
		System.out.println("是否可以连接InfluxDb:" + ping);
		//
		// Flux
		//
		String flux = "from(bucket: \"mydb\") " // bucket就代表当前的influxdb1.8中的database
				+ " |> range(start: -3h, stop: 3h) " // 必须要有起始时间和结束时间
				+ " |> filter(fn: (r) => r[\"_measurement\"] == \"treasures\")"; // _measurement 表示当前的series
		/*
		 * String flux = String.format("from(bucket: \"%s\") " +
		 * " |> range(start: -3h, stop: 3h) " +
		 * " |> filter(fn: (r) => r[\"_measurement\"] == \"%s\") ", "mydb", "mem");
		 */
		// String flux ="chunked=true&db=mydb&epoch=ns&q=select * from treasures";
		//
		// Synchronous query
		//
		List<FluxTable> tables = fluxClient.query(flux);
		System.out.println("开始显示数据===============>");
		System.out.println("time : captain_id : value");
		for (FluxTable fluxTable : tables) {
			List<FluxRecord> records = fluxTable.getRecords(); // 获取实际的记录操作
			// List<FluxColumn> columns = fluxTable.getColumns(); // 获取返回的列
			// System.out.println(columns); // 下面的数据显示是按照当前的column中的label名称获取的数据
			// System.out.println(records);

			for (FluxRecord fluxRecord : records) {
				System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("captain_id") + ":"
						+ fluxRecord.getValueByKey("_value"));
			}

		}
		System.out.println("开始显示数据<===============");
		//
		// Asynchronous query 。一个异步操作请求
		//
		/*
		 * fluxClient.query(flux, (cancellable, record) -> {
		 * 
		 * // process the flux query result record System.out.println(record.getTime() +
		 * ": " + record.getValue());
		 * 
		 * }, error -> {
		 * 
		 * // error handling while processing result
		 * System.out.println("Error occurred: " + error.getMessage());
		 * 
		 * }, () -> {
		 * 
		 * // on complete System.out.println("Query completed"); });
		 */

		fluxClient.close();
	}

使用InfluxDBClient方式(这个可以写入数据操作,也可以执行查询操作)

/**
	 * 
	 * @author hy
	 * @createTime 2021-03-14 12:00:16
	 * @description 使用官方推荐的方式查询
	 *
	 */
	public static void queryExampleUseingInfluxDBClient() {
		String database = "mydb";
		String retentionPolicy = "autogen";

		// 1.打开客户端
		InfluxDBClient client = InfluxDBClientFactory.createV1("http://192.168.1.101:8086", "root",
				"root".toCharArray(), database, retentionPolicy);
		

		System.out.println("*** Write Points ***");
		
		// 2.创建写入api
		try (WriteApi writeApi = client.getWriteApi()) {
			
			Point point = Point.measurement("treasures").addTag("captain_id", "crunch").addField("value", 19.5f);

			System.out.println(point.toLineProtocol());
			// 执行写入数据操作
			writeApi.writePoint(point);
		}
		
		// 开始执行查询操作
		System.out.println("*** Query Points ***");
		String query = String.format("from(bucket: \"%s\") " // bucket就代表当前的influxdb1.8中的database
				+ " |> range(start: -3h, stop: 3h) " // 必须要有起始时间和结束时间
				+ " |> filter(fn: (r) => r[\"_measurement\"] == \"%s\")",database,"treasures"); // _measurement 表示当前的series
		List<FluxTable> tables = client.getQueryApi().query(query);
		tables.get(0).getRecords().forEach(record -> System.out.println(String.format("%s %s: %s %s", record.getTime(),
				record.getMeasurement(), record.getField(), record.getValue())));

		client.close();
	}

结果成功!,注意官方中influxdb-client-flux没有2.0.0版本!