使用反射批量插入
public void insertBatchByPoints(List<?> list){
BatchPoints batchPoints = BatchPoints.database(database)
.consistency(InfluxDB.ConsistencyLevel.ALL)
.build();
list.forEach(object->{
Class<?> clasz = object.getClass();
//获取度量
Measurement measurement = clasz.getAnnotation(Measurement.class);
//构建
Point.Builder builder = Point.measurement(measurement.name());
Field[] fieldArray = clasz.getDeclaredFields();
Column column = null;
for(Field field : fieldArray){
try {
column = field.getAnnotation(Column.class);
//设置属性可操作
field.setAccessible(true);
if(column.tag()){
//tag属性只能存储String类型
builder.tag(column.name(), field.get(object).toString());
}else{
//设置field
if(field.get(object) != null){
builder.addField(column.name(), field.get(object).toString());
}
if(field.getName() =="time"){
builder.time((long)field.get(object), TimeUnit.NANOSECONDS);
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
batchPoints.point(builder.build());
});
influxDB.write(batchPoints);
}
influxdb实体类需要有 long 类型的 time 字段
此处的单位为纳秒,一般为毫秒,可以更改一下单位