2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpringでCassandra接続

Posted at

SpringでCassandraに接続するメモ

dockerでCassandraを立ち上げる場合はこちらを参考にしてください

依存追加

Gradle

build.gradle
dependencies {
    implementation 'org.springframework.data:spring-data-cassandra:2.0.10.RELEASE'
}

Maven

pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-cassandra -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-cassandra</artifactId>
    <version>2.1.10.RELEASE</version>
</dependency>

application.ymlの記述

application.yml
spring:
  data:
    cassandra:
      username: user
      password: pass
      keyspaceName: test
      contactPoints: localhost
      port: 9044

Configの作成

ここでbasepackageを指定することで配下のRepositoryには全てこの設定が適用される
こんな感じ
cassandra

  • Repository
    Config

Cassandraを二つ繋ぐ必要がある場合にはbasepackage単位で設定する

@Configuration
@EnableCassandraRepositories(
        basePackages = "jp.co.sample.cassandrasample.infrastructure.cassandra.*",
        cassandraTemplateRef = "cassandraTemplate")
public class CassandraConfig extends AbstractCassandraConfiguration {

    @Value("${spring.data.cassandra.username}")
    private String username;

    @Value("${spring.data.cassandra.password}")
    private String password;

    @Value("${spring.data.cassandra.keyspaceName}")
    private String keyspaceName;

    @Value("${spring.data.cassandra.contactPoints}")
    private String contactPoints;

    @Value("${spring.data.cassandra.port}")
    private int port;

    @Override
    @Primary
    @Bean(name = "cassandraTemplate")
    public CassandraAdminTemplate cassandraTemplate() {
        return new CassandraAdminTemplate(Objects.requireNonNull(session().getObject()), cassandraConverter());
    }

    // ポート番号の設定
    @Override
    @Bean(name = "Port")
    public int getPort() {
        return port;  // デフォルトは9042
    }

    // キースペースの設定
    @Override
    @Bean(name = "KeySpace")
    protected String getKeyspaceName() {
        return keyspaceName;
    }

    /**
     * クラスタの設定
     */
    @Bean(name = "cluster")
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
        PlainTextAuthProvider plainTextAuthProvider = new PlainTextAuthProvider(username,password);

        cluster.setContactPoints(contactPoints);
        cluster.setPort(port);
        cluster.setRetryPolicy(DefaultRetryPolicy.INSTANCE);
        cluster.setAuthProvider(plainTextAuthProvider);
        return cluster;
    }

    @Override
    @Bean(name = "Session")
    public CassandraSessionFactoryBean session() {

        CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();

        session.setCluster(Objects.requireNonNull(cluster().getObject()));
        session.setConverter(cassandraConverter());
        session.setKeyspaceName(getKeyspaceName());
        session.setSchemaAction(getSchemaAction());
        session.setStartupScripts(getStartupScripts());
        session.setShutdownScripts(getShutdownScripts());

        return session;
    }

    @Override
    public QueryOptions getQueryOptions() {
        QueryOptions queryOptions = new QueryOptions();
        queryOptions.setConsistencyLevel(ConsistencyLevel.QUORUM);
        return queryOptions;
    }
}

Entityの作成

@AllArgsConstructor
@Data
@EqualsAndHashCode
@Table(value = "test_table")
public class TestJpaEntity {

    @PrimaryKey("id")
    private String table_id;

    private String data;

    @Column("update_time")
    private Date updateTime;

}

Repositoryの作成


public interface TestRepository extends CrudRepository<RecentItemJpaEntity, String> {
    List<TestJpaEntity> findAll();
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?