spring中的配置:
spring:
influx:
url: http://localhost:8086
user: tony
password: 123456
pom.xml中的依赖配置:
<dependency>
<groupId>com.influxdb</groupId>
<artifactId>influxdb-client-java</artifactId>
<version>6.7.0</version>
</dependency>
增加配置类,工具类influxDBClient注入容器:
@Configuration
public class InfluxDBConfig {
@ConfigurationProperties(prefix = "spring.influx")
@Bean
public InfluxDBClient influxDBClient(InfluxDbProperties influxDbProperties) {
String serverURL = influxDbProperties.getUrl(),
username = influxDbProperties.getUser(),
password = influxDbProperties.getPassword();
String retentionPolicyName = "thirty_days";
String databaseName="uny";
InfluxDBClient influxDBClient = InfluxDBClientFactory.createV1(serverURL, username, password.toCharArray(),databaseName,retentionPolicyName);
return influxDBClient;
}
}
装配使用:
@Resource
private InfluxDBClient influxDBClient;
@Override
public List<Cpu> selectChartDataList(TimeSearchDTO DateZoneParams) {
String sql = "select * from cpu " ;
if( DateZoneParams != null ){
sql = sql + " where time > '"+ DateZoneParams.getStartTime() +" 00:00:00' and time <'"+ DateZoneParams.getEndTime() +" 23:59:59' ";
}
//返回实体
List<Cpu> dataList = InfluxUtil.query(influxDBClient,Cpu.class, sql);
return dataList;
}
常用方法:
package com.ruoyi;
import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.ruoyi.quartz.domain.server.QzServer;
import com.ruoyi.quartz.task.ServerTask;
import com.ruoyi.uny.entity.Cpu;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
public class InfluxdbTest {
@Autowired
ServerTask serverTask;
@Resource
private InfluxDBClient influxDBClient;
@Test
void contextLoads() throws Exception{
System.out.println("-------------->>>>>>>>>>>111");
// //返回实体
// String sql = "select * from cpu where ip='192.168.101.200' " ;
// List<Cpu> dataList = InfluxUtil.query(influxDBClient,Cpu.class, sql);
// dataList.forEach(System.out::println);
WriteApiBlocking writeApi = influxDBClient.getWriteApiBlocking();
for (int i = 0; i < 100; i++) {
QzServer qzServer = new QzServer();
qzServer.copyTo();
Cpu cpu = new Cpu();
cpu.setIp(qzServer.getQzSys().getComputerIp())
.setMemUsed(qzServer.getMem().getUsed())
.setMemFree(qzServer.getMem().getFree())
.setMemUsage(qzServer.getMem().getUsage())
.setCpuUsed( qzServer.getQzCpu().getUsed())
.setCpuTotal(qzServer.getQzJvm().getTotal())
.setJvmUsage(qzServer.getQzJvm().getUsage());
// .setTime(Instant.now());
写入对象
writeApi.writeMeasurement( WritePrecision.MS, cpu);
Thread.sleep(1000);
}
}
}
踩坑指南:
com.influxdb.exceptions.ForbiddenException
at com.influxdb.internal.AbstractRestClient.responseToError(AbstractRestClient.java:119)
at com.influxdb.internal.AbstractQueryApi$1.onResponse(AbstractQueryApi.java:220)
at com.influxdb.internal.AbstractQueryApi.query(AbstractQueryApi.java:247)
at com.influxdb.internal.AbstractQueryApi.query(AbstractQueryApi.java:199)
at com.influxdb.internal.AbstractQueryApi.queryRaw(AbstractQueryApi.java:153)
at com.influxdb.client.internal.QueryApiImpl.queryRaw(QueryApiImpl.java:955)
at com.influxdb.client.internal.QueryApiImpl.queryRaw(QueryApiImpl.java:675)
at com.influxdb.client.internal.QueryApiImpl.queryRaw(QueryApiImpl.java:613)
at com.influxdb.client.internal.QueryApiImpl.queryRaw(QueryApiImpl.java:603)
at com.ruoyi.quartz.task.ServerTask.saveServerDataToInfluxDB(ServerTask.java:79)
java客户端查询报上述错误:
打开服务根目录下的influxdb.conf文件,去掉这一行的注解(前面的#):
flux-enabled = true