0

用例:-

我们正在使用 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 一起使用!在这种情况下让事务性属性在这里工作的方法是什么?

任何帮助或建议将不胜感激!

4

1 回答 1

0

Aerospike 仅支持单个记录的事务。您将需要在应用程序中为多条记录执行插入回滚逻辑。

于 2020-10-26T11:38:04.123 回答