Java 如何使用Spring数据异步插入Cassandra?

Java 如何使用Spring数据异步插入Cassandra?,java,spring,spring-data-cassandra,Java,Spring,Spring Data Cassandra,在旧版本的Spring Data Cassandra中,批处理实现如下: String cqlIngest = "insert into person (id, name, age) values (?, ?, ?)"; List<Object> person1 = new ArrayList<Object>(); person1.add("10000"); person1.add("David"); person1.add(40); List<Object&g

在旧版本的Spring Data Cassandra中,批处理实现如下:

String cqlIngest = "insert into person (id, name, age) values (?, ?, ?)";

List<Object> person1 = new ArrayList<Object>();
person1.add("10000");
person1.add("David");
person1.add(40);

List<Object> person2 = new ArrayList<Object>();
person2.add("10001");
person2.add("Roger");
person2.add(65);

List<List<?>> people = new ArrayList<List<?>>();
people.add(person1);
people.add(person2);

cassandraOperations.ingest(cqlIngest, people);
是否有一种方法可以通过cqlIngest和上面给出的代码示例的旧版本中的人们


我将Spring2.0.7.RELEASE与Cassandra驱动程序3.5.0一起使用。

对于ApacheCassandra 2.0的Spring数据,API进行了重构和清理

以前,模板API是低级和高级功能与同步和异步执行模型的混合体,混入一个类中

自2.0版以来,现在有以下API可用:

前一个
inset
方法接受CQL字符串和
List
List
的参数。我们将这种情况简化为
inset
在没有适当同步的情况下异步执行CQL。您可以通过
AsyncqlTemplate.execute(…)
实现类似的功能:

ListenableFuture insert1=template.execute(“插入到个人(id、姓名、年龄)值(?、、?)”,
“10000”,“大卫”,40);
ListenableFuture insert2=template.execute(“插入到个人(id、姓名、年龄)值(?、、?)”,
“10001”,“罗杰”,65岁);
有两个区别:

  • 您负责迭代参数
  • 您将收到一个
    ListenableFuture
    ,它允许您进行同步以获得成功和异常执行

  • 在您的示例中,您正在批处理不同的分区键(我理解代码)。这是错误的做法-2个异步调用应该更快地执行,这是正确的。以上只是我选择的一个例子。谢谢你的回复。我会尝试一下。我觉得上面的方法可以简化,因为我们需要迭代未来。在本例中,Im使用相同的插入查询,但每个插入查询的插入值都会更改。如何才能最好地做到这一点。我也让它并行运行,最后看到了异常。在答案部分粘贴代码您能告诉我在上面部分中实现的方式有什么问题吗?
    template.batchOps().insert(new User()).execute();
    
    ListenableFuture<Boolean> insert1 = template.execute("insert into person (id, name, age) values (?, ?, ?)", 
                                                         "10000", "David", 40);
    ListenableFuture<Boolean> insert2 = template.execute("insert into person (id, name, age) values (?, ?, ?)", 
                                                         "10001", "Roger", 65);