首先来说要连接阿里云的ots,需要初始化客户端
首先来说
这几个参数是阿里云注册的
final String endPoint = "";
final String accessKeyId = "";
final String accessKeySecret = "";
final String instanceName = "";//这个实施,记住,不是表,表是实例里面的
SyncClient client = new SyncClient(endPoint, accessKeyId, accessKeySecret, instanceName);
这是项目中使用的代码
@Component
public class OtsUtil {
@Value("${ots.endpoint}")
private String endPoint;
@Value("${ots.accesskey}")
private String accessKey;
@Value("${ots.accessid}")
private String accessId;
@Value("${ots.instancename}")
private String instanceName;
private volatile SyncClient otsClient;
private final static Logger logger = Logger.getLogger(OtsUtil.class);
public SyncClient getInstance() {
if (otsClient == null) {
synchronized (this) {
if (otsClient == null) {
try {
otsClient = new SyncClient(endPoint, accessId, accessKey,instanceName);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
}
return otsClient;
}
public List<OtsUwb> getRange(String deviceID, Long startTime, Long endTime, String tableName) {
otsClient = getInstance();
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria(tableName);
//设置起始主键。
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("DeviceId", PrimaryKeyValue.fromString(deviceID));
primaryKeyBuilder.addPrimaryKeyColumn("Timestamp", PrimaryKeyValue.fromLong(startTime));
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
//设置结束主键。
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("DeviceId", PrimaryKeyValue.fromString(deviceID));
primaryKeyBuilder.addPrimaryKeyColumn("Timestamp", PrimaryKeyValue.fromLong(endTime+1));
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
rangeRowQueryCriteria.setMaxVersions(1);
System.out.println("GetRange的结果为:");
List<OtsUwb> otsUwbList=new ArrayList<>();
while (true) {
GetRangeResponse getRangeResponse = otsClient.getRange(new GetRangeRequest(rangeRowQueryCriteria));
for (Row row : getRangeResponse.getRows()) {
// List<Column> length = row.getColumn("Length");
List<Column> raw = row.getColumn("Raw");
for(Column v:raw){
String s = v.getValue().toString();
String substring = s.substring(1, s.length() - 1);
//这里是把获取到的数据字符串变成对象
OtsUwb otsUwb= JSONObject.parseObject(substring, OtsUwb.class);
otsUwbList.add(otsUwb);
}
}
//如果NextStartPrimaryKey不为null,则继续读取。
if (getRangeResponse.getNextStartPrimaryKey() != null) {
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
} else {
break;
}
}
return otsUwbList;
}