返回

如何将 Java Spring Boot 应用程序连接到 Amazon Keyspaces?

java

如何将 Java Spring Boot 应用程序连接到 Amazon Keyspaces

简介

连接 Java Spring Boot 应用程序到 Amazon Keyspaces 可以让您充分利用 NoSQL 数据库的强大功能。本指南将逐步指导您完成此过程,解决常见错误并提供提示以确保成功连接。

步骤

1. 配置依赖项

将以下依赖项添加到您的 pom.xml 文件中:

<dependencies>
    <dependency>
        <groupId>com.datastax.oss</groupId>
        <artifactId>java-driver-core</artifactId>
        <version>4.8.0</version>
    </dependency>
    <dependency>
        <groupId>com.datastax.oss</groupId>
        <artifactId>java-driver-query-builder</artifactId>
        <version>4.8.0</version>
    </dependency>
    <dependency>
        <groupId>com.datastax.oss</groupId>
        <artifactId>java-driver-mapper-runtime</artifactId>
        <version>4.8.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra-reactive</artifactId>
        <version>2.4.5</version>
    </dependency>
</dependencies>

2. 配置 application.conf

在您的 application.conf 文件中,配置以下设置:

datastax-java-driver {
    basic.contact-points = ["cassandra.us-east-2.amazonaws.com:9142"]
    advanced.auth-provider {
        class = PlainTextAuthProvider
        username = "**** **"
        password = "**** **"
    }
    basic.load-balancing-policy {
        local-datacenter = "us-east-2"
    }
    advanced.connection {
        timeout = 30 seconds
        connect-timeout = 30 seconds
        init-query-timeout = 30 seconds
    }

    advanced.metadata {
        schema.enabled = "false"
        token-map.enabled = "false"
    }

    advanced.ssl-engine-factory {
        class = DefaultSslEngineFactory
        cipher-suites = [ "TLS_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_256_CBC_SHA" ]
        truststore-path = "./src/main/resources/cassandra_truststore.jks"
        truststore-password = "**** "
    }
}

3. 实现 Cassandra 配置类

创建以下 Cassandra 配置类:

import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
import com.datastax.oss.driver.internal.core.config.typesafe.DefaultDriverConfigLoader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractReactiveCassandraConfiguration;
import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.repository.config.EnableReactiveCassandraRepositories;

@Configuration
@EnableReactiveCassandraRepositories
public class CassandraSetup extends AbstractReactiveCassandraConfiguration {

    @Value("${cassandra.contact-points}")
    private String contactPoints;

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

    @Value("${cassandra.keyspace}")
    private String keyspace;

    @Value("${cassandra.data.local-datacenter}")
    private String dataCenter;

    @Override
    protected String getKeyspaceName() {
        return keyspace;
    }

    @Override
    protected String getContactPoints() {
        return contactPoints;
    }

    @Override
    protected int getPort() {
        return port;
    }

    @Override
    public SchemaAction getSchemaAction() {
        return SchemaAction.NONE;
    }

    @Override
    protected CqlSession getRequiredSession() {
        DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf");
        return CqlSession.builder().withConfigLoader(loader).withLocalDatacenter(dataCenter).build();
    }
}

常见错误

以下是一些您在连接时可能遇到的常见错误:

  • 无法连接到任何联系点: 确保您的联系点是正确的,并且您的防火墙允许与 Keyspaces 集群进行通信。
  • SSL 证书错误: 确保您的 SSL 证书包含与 AWS Keyspaces 联系点 IP 地址匹配的备用主题名称 (SAN)。
  • 身份验证失败: 检查您的用户名和密码是否正确。
  • 表不存在: 确保在 Keyspaces 中创建了表,并且您具有访问它们的权限。
  • 数据类型不匹配: 确保 Java 应用程序中的数据类型与 Keyspaces 表中定义的数据类型匹配。

结论

通过遵循这些步骤,您可以成功连接 Java Spring Boot 应用程序到 Amazon Keyspaces。如果您遇到任何问题,请参阅本文中提供的常见错误部分或访问 AWS 文档以获取更多帮助。

常见问题解答

  • 我可以使用哪些其他 Java 驱动程序连接到 Keyspaces?
    • DataStax Java 驱动程序
    • Apache Cassandra 驱动程序
  • 如何处理模式变更?
    • 使用 DataStax Java 驱动程序的自动模式更新功能
  • 如何提升应用程序的性能?
    • 使用分区键和次级索引
  • 如何管理数据安全性?
    • 使用加密和权限控制
  • 如何扩展 Keyspaces 以处理更多数据?
    • 添加更多节点或使用跨区域复制