【问题标题】:Spring-data-aerospike | how to achieve rollback in case whole transaction is rolled back弹簧数据 aerospike |在整个事务回滚的情况下如何实现回滚
【发布时间】:2020-09-08 05:05:34
【问题描述】:

用例:-

我们正在使用 Spring-data-aerospike 来获取并保存 aerospike 记录。

问题:- 我们在两个不同的 aerospike 集合中执行 SAVE,这两个 SAVE 都应该以事务方式发生,即如果第二次写入失败,那么第一次写入也应该回滚。

这里的代码-sn-p 看起来像:-

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

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

【问题讨论】:

    标签: java spring-data-jpa spring-data aerospike aerospike-ce


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多