用例:-
我们正在使用 Spring-data-aerospike 来获取并保存 aerospike 记录。
问题:- 我们在两个不同的 aerospike 集合中执行 SAVE,这两个 SAVE 都应该以事务方式发生,即如果第二次写入失败,那么第一次写入也应该回滚。
这是代码片段的样子:-
@Document(collection = "cust", expiration = 90, expirationUnit = TimeUnit.DAYS)
public class Customer {
@Id
@Field(value = "PK")
private String custId;
@Field(value = "mobileNumber")
private String mobileNumber;
}
@Document(collection = "custDetails", expiration = 90, expirationUnit = TimeUnit.DAYS)
public class CustomerDetails {
@Id
@Field(value = "PK")
private String custDetailsId;
@Field(value = "addnDetails")
private Map additionalDetails;
}
@Repository
public interface CustomerRepository extends AerospikeRepository<Customer, String> {}
@Repository
public interface CustomerDetailsRepository extends AerospikeRepository<CustomerDetails, String>{}
@Autowired
AerospikeTemplate aerospikeTemplate;
这是我们想要实现的目标,但现在不起作用:-
@Transactional(isolation = Isloation.SERIALIZABLE, rollbackFor=Exception.class)
public ResponseDTO<String> updateCustomer(CustomerUpdateRequest custUpdateReqDTO) {
Optional<Customer> cust = customerRepository.findById(custUpdateReqDTO.getCustId());
// Update Business logic of Customer Record.
aerospikeTemplate.update(cust);
Optional<CustomerDetails> custDet = customerDetailsRepository.findById(custUpdateReqDTO.getCustDetId());
// Update Business logic of CustomerDetails Record.
aerospikeTemplate.update(custDet);
}
这是依赖项的样子:-
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>aerospike-client</artifactId>
<version>4.1.3</version>
</dependency>
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>spring-data-aerospike</artifactId>
<version>${aerospike.data.version}</version>
<scope>system</scope>
<systemPath>${basedir}/lib/spring-data-aerospike-2.0.0.RELEASE.jar</systemPath>
</dependency>
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>aerospike-client</artifactId>
</dependency>
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>aerospike-helper-java</artifactId>
<version>1.2.2</version>
</dependency>
问题 :-
我们知道 Spring 事务注释可与 RDBMS 一起使用!在这种情况下让事务性属性在这里工作的方法是什么?
任何帮助或建议将不胜感激!