入門
Apache Cassandra 用の Spring Data には、Apache Cassandra 2.1 以降と Datastax Java Driver 4.0 以降が必要です。作業環境をすばやくセットアップしてブートストラップする簡単な方法は、Pleiades All in One (JDK, STS, Lombok 付属) 、Spring Tools (英語) で Spring ベースのプロジェクトを作成するか、start.spring.io を使用することです。
サンプルリポジトリ
ライブラリがどのように機能するかを知るために、いくつかの例 [GitHub] (英語) をダウンロードして試してみることができます。
Hello World
まず、実行中の Apache Cassandra サーバーをセットアップする必要があります。Apache Cassandra の起動方法については、Apache Cassandra クイックスタートガイド (英語) を参照してください。インストールが完了したら、Cassandra を起動するには通常、次のコマンドを実行します: CASSANDRA_HOME/bin/cassandra -f
。
STS で Spring プロジェクトを作成するには、ファイル→ 新規作成 → Spring テンプレートプロジェクト→ シンプル Spring ユーティリティプロジェクトに移動し、プロンプトが表示されたら はい を押します。次に、プロジェクトとパッケージ名 ( org.spring.data.cassandra.example
など) を入力します。
次に、次の依存関係宣言を pom.xml ファイルの dependencies
セクションに追加できます。
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>4.5.0</version>
</dependency>
</dependencies>
また、pom.xml ファイル内の Spring のバージョンを次のように変更する必要があります。
<spring.version>6.2.7</spring.version>
GA リリースの代わりにマイルストーンリリースを使用する場合は、次のように、Maven の Spring マイルストーンリポジトリの場所を pom.xml ファイルに追加して、<dependencies/>
要素と同じレベルになるようにする必要もあります。
<repositories>
<repository>
<id>spring-milestone</id>
<name>Spring Maven MILESTONE Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
リポジトリも参照できます (英語) 。
ここですべての Spring リポジトリを参照することもできます。
これで、ドメインオブジェクトを Cassandra に格納したり、Cassandra から読み取ったりする単純な Java アプリケーションを作成できるようになりました。
これを行うには、次の例に示すように、まず永続化する単純なドメインオブジェクトクラスを作成します。
package org.springframework.data.cassandra.example;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;
@Table
public class Person {
@PrimaryKey private final String id;
private final String name;
private final int age;
public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
private String getName() {
return name;
}
private int getAge() {
return age;
}
@Override
public String toString() {
return String.format("{ @type = %1$s, id = %2$s, name = %3$s, age = %4$d }", getClass().getName(), getId(),
getName(), getAge());
}
}
次に、次の例に示すように、実行するメインアプリケーションを作成します。
命令的
リアクティブ
package org.springframework.data.cassandra.example;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;
import com.datastax.oss.driver.api.core.CqlSession;
public class CassandraApplication {
private static final Log LOG = LogFactory.getLog(CassandraApplication.class);
private static Person newPerson(String name, int age) {
return new Person(UUID.randomUUID().toString(), name, age);
}
public static void main(String[] args) {
CqlSession cqlSession = CqlSession.builder().withKeyspace("mykeyspace").build();
CassandraOperations template = new CassandraTemplate(cqlSession);
Person jonDoe = template.insert(newPerson("Jon Doe", 40));
LOG.info(template.selectOne(Query.query(Criteria.where("id").is(jonDoe.getId())), Person.class).getId());
template.truncate(Person.class);
cqlSession.close();
}
}
package org.springframework.data.cassandra.example;
import reactor.core.publisher.Mono;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.cassandra.core.ReactiveCassandraOperations;
import org.springframework.data.cassandra.core.ReactiveCassandraTemplate;
import org.springframework.data.cassandra.core.cql.session.DefaultBridgedReactiveSession;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;
import com.datastax.oss.driver.api.core.CqlSession;
public class ReactiveCassandraApplication {
private static final Log LOG = LogFactory.getLog(ReactiveCassandraApplication.class);
private static Person newPerson(String name, int age) {
return new Person(UUID.randomUUID().toString(), name, age);
}
public static void main(String[] args) {
CqlSession cqlSession = CqlSession.builder().withKeyspace("mykeyspace").build();
ReactiveCassandraOperations template = new ReactiveCassandraTemplate(new DefaultBridgedReactiveSession(cqlSession));
Mono<Person> jonDoe = template.insert(newPerson("Jon Doe", 40));
jonDoe.flatMap(it -> template.selectOne(Query.query(Criteria.where("id").is(it.getId())), Person.class))
.doOnNext(it -> LOG.info(it.toString()))
.then(template.truncate(Person.class))
.block();
cqlSession.close();
}
}
この単純な例でも、注目すべき点がいくつかあります。
Cassandra
CqlSession
を使用して、CassandraTemplate
(Javadoc) (またはリアクティブ使用の場合はReactiveCassandraTemplate
(Javadoc) ) のインスタンスを作成できます。POJO に Cassandra
@Table
エンティティとしてアノテーションを付け、@PrimaryKey
にもアノテーションを付ける必要があります。オプションで、これらのマッピング名をオーバーライドして、Cassandra データベースのテーブル名と列名に一致させることができます。クエリを構築するには、生の CQL またはドライバー
QueryBuilder
API を使用できます。