![datastax](https://img-blog.csdnimg.cn/img_convert/d0e817e96d0612735bce9933c61971ac.png)
datastax
今天,我这次返回了更多的Cassandra和Java集成,重点是使用Datastax Java驱动程序,而不是我已经写了很多文章的Spring Data Cassandra。 Spring Data实际上使用了Datastax驱动程序来与Cassandra进行交互,但是在它之上还带有一些额外的功能。 但是我们今天不想要任何这些! 我们将直接使用Datastax驱动程序,并且在帖子结尾处,一旦我们看到了如何使用它,我们将其与Spring Data进行比较。
这篇文章假设您已经熟悉Cassandra,可能已经熟悉Spring Data Cassandra。 由于我已经写了很多关于该主题的文章,所以我只讨论了Cassandra在需要上下文的地方如何工作。 如果您没有此背景信息,我建议您阅读Spring Data Cassandra入门,在该文章中我显然谈到了使用Spring Data Cassandra,但是与本文相比,我对Cassandra的工作原理进行了更详尽的解释。 还有Datastax学院,它提供了一些非常有用的资源来学习如何自己使用Cassandra。
首先,依赖性。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
</dependencies>
和往常一样,我使用Spring Boot只是因为我们剥夺了自己的Spring Data并不意味着我们需要从所有Spring库中完全摆脱掉。 这里与Datastax相关的依赖关系是cassandra-driver-core
和cassandra-driver-mapping
。 顾名思义, cassandra-driver-core
提供了与Cassandra交互的核心功能,例如建立会话和编写查询。 cassandra-driver-mapping
不是查询Cassandra所必需的,但确实提供了一些对象映射,它与核心驱动程序一起将用作ORM,而不仅仅是允许我们执行CQL语句。
现在,我们已经对依赖项进行了排序,下一步是连接到Cassandra,以便我们实际上可以开始查询它了。
@Configuration
public class CassandraConfig {
@Bean
public Cluster cluster(
@Value("${cassandra.host:127.0.0.1}") String host,
@Value("${cassandra.cluster.name:cluster}") String clusterName,
@Value("${cassandra.port:9042}") int port) {
return Cluster.builder()
.addContactPoint(host)
.withPort(port)
.withClusterName(clusterName)
.build();
}
@Bean
public Session session(Cluster cluster, @Value("${cassandra.keyspace}") String keyspace)
throws IOException {
final Session session = cluster.connect();
setupKeyspace(session, keyspace);
return session;
}
private void setupKeyspace(Session session, String keyspace) throws IOException {
final Map<String, Object> replication = new HashMap<>();
replication.put("class", "SimpleStrategy");
replication.put("replication_factor", 1);
session.execute(createKeyspace(keyspace).ifNotExists().with().replication(replication));
session.execute("USE " + keyspace);
// String[] statements = split(IOUtils.toString(getClass().getResourceAsStream("/cql/setup.cql")), ";");
// Arrays.stream(statements).map(statement -> normalizeSpace(statement) + ";").forEach(session::execute);
}
@Bean
public MappingManager mappingManager(Session session) {
final PropertyMapper propertyMapper =
new DefaultPropertyMapper()
.setNamingStrategy(new DefaultNamingStrategy(LOWER_CAMEL_CASE, LOWER_SNAKE_CASE));
final MappingConfiguration configuration =
MappingConfiguration.builder().withProperty