微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

春季数据空中加息|在整个事务回滚的情况下如何实现回滚

如何解决春季数据空中加息|在整个事务回滚的情况下如何实现回滚

用例:-

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

问题:-我们正在将SAVE执行到两个不同的航空突刺组中,并且这两个SAVES应该以事务方式进行,即,如果第二次写入失败,那么第一次写入也应该回滚。

这里的代码段看起来像:-

val request = Request.Builder()
    .url("http://publicobject.com/helloworld.txt")
    .build()

// Coroutines not supported directly,use the basic Callback way:
client.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call,e: IOException) {
        e.printstacktrace()
    }

    override fun onResponse(call: Call,response: Response) {
        response.use {
            if (!response.isSuccessful) throw IOException("Unexpected code $response")

            for ((name,value) in response.headers) {
                println("$name: $value")
            }

            println(response.body!!.string())
        }
    }
})

这是我们要实现的目标,目前尚无法解决:-

@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",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);

}

问题:-

我们知道,Spring事务注释可用于RDBMS!在这种情况下,如何使事务性属性在这里工作?

任何帮助或建议都将受到高度赞赏!

解决方法

Aerospike仅对单个记录提供事务支持。您将需要在应用程序内部执行插入回滚逻辑以获取多个记录。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。