I am trying to write a Spring batch code to copy data in Aerospike DB. So trying to use batch write.
public void write(Chunk<? extends List<AeroSpikeData>> chunk) throws Exception {
List<BatchRecord> records = new ArrayList<BatchRecord>();
for (List<AeroSpikeData> item : chunk) {
for (AeroSpikeData row : item) {
Operation[] ops = Operation.array(
Operation.put(new Bin("data", Value.get(row.data))));
records.add(new BatchWrite(new Key(namespace, setname, Value.get(row.PK)), ops));
}
}
aerospikeClient.operate(null, records);
}
Here is the config.
public AerospikeClient aerospikeDBClient() {
Host[] hosts = new Host[] { new Host(host1, port), new Host(host2, port), new Host(host3, port) };
WritePolicy writePolicy = new WritePolicy();
BatchPolicy batchPolicy = new BatchPolicy();
ClientPolicy policy = new ClientPolicy();
writePolicy.sendKey = batchPolicy.sendKey = true;
writePolicy.socketTimeout = batchPolicy.socketTimeout = 30000;
writePolicy.totalTimeout = batchPolicy.totalTimeout = 30000;
writePolicy.connectTimeout = batchPolicy.connectTimeout = 30000;
batchPolicy.maxConcurrentThreads = 0;
policy.user = user;
policy.password = password;
policy.failIfNotConnected = true;
policy.timeout = 0;
policy.writePolicyDefault = writePolicy;
policy.batchParentPolicyWriteDefault = batchPolicy;
return new AerospikeClient(policy, hosts);
}
pom dependency
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>aerospike-client</artifactId>
<version>7.2.1</version>
</dependency>