由于网上关于rrd4j的使用案例太少,常见的几乎都是rrd4j的简单使用demo,以至于在将收发光功率的数据存入RRD时,发现RRD无法存储负数的情况。
代码修改非常简单,在查看源码的时候发现,rrdDef在调用addDatasource方法时,所传参数如下:
public void addDatasource(String dsName, DsType dsType, long heartbeat, double minValue, double maxValue) {
addDatasource(new DsDef(dsName, dsType, heartbeat, minValue, maxValue));
}
而在demo中,传参一般为下面内容
rrdDef.addDatasource(name, dsType, 60 * 5 * 2, 0, Double.NaN);
0作为数据源最小值在创建RRD时已经确定,所以后续RRD无法插入负值,只需要将0改为所需的最小值即可,例如:-2000
将RRD文件删除重建,无法存储负数的问题就解决了!