如何在 Java Spring Boot 应用中连接 GridDB Cloud?
连接 GridDB Cloud 时,将原代码中的 notificationAddress 和 notificationPort 替换为实例提供的 notificationProvider URL。clusterName、数据库名称和用户凭据也要填写云实例的实际值,不要沿用 myCluster 和 admin/admin。官方 Cloud 快速入门说明,Cloud 使用 provider method 发现集群。GridDB Cloud 快速入门
获取连接信息
在 GridDB Cloud 管理控制台确认以下参数:
| Java 属性 | 应填写的内容 |
|---|---|
notificationProvider | 集群的 Notification Provider URL,保留完整路径和查询参数 |
clusterName | 控制台显示的实际 Cluster Name |
database | 当前用户获准访问的数据库名称 |
user | 创建的数据库用户的完整用户名 |
password | 该数据库用户的密码 |
管理控制台登录账号与数据库用户用途不同。请创建数据库用户,授予其访问目标数据库所需的权限。数据库名称也不一定是 public。连接信息与数据库用户配置
准备客户端和网络
从 Cloud 控制台的下载入口获取适配实例的 Java 客户端及配套库。如果 Cloud 连接需要 SSL 扩展,确保 gridstore-advanced.jar 等所需依赖包含在应用运行时的 classpath 中。仅添加普通 Java client library 可能不足以建立连接。
如果实例支持原生 Client API 公网访问,需配置允许访问的应用出口 IP,并设置 connectionRoute=PUBLIC。私网连接应先建立相应的网络连通性,再按实例的私网配置填写连接参数。公网能力取决于服务版本和实例配置,单独增加一个属性无法确认网络已经打通。GridDB Cloud 公网连接说明
在 Spring Boot 中配置连接
以下示例适用于支持公网 Client API 的实例。通过环境变量提供实际值,并在 application.yml 中引用:
griddb:
notification-provider: ${GRIDDB_NOTIFICATION_PROVIDER}
cluster-name: ${GRIDDB_CLUSTER_NAME}
database: ${GRIDDB_DATABASE}
user: ${GRIDDB_USER}
password: ${GRIDDB_PASSWORD}
原问题使用的是 NoSQL Java API,可以直接创建 GridStore,无需配置 JDBC DataSource。以下服务方法为每次操作创建独立的 GridStore 实例,并在结束后关闭资源:
import java.util.Properties;
import com.toshiba.mwcloud.gs.GSException;
import com.toshiba.mwcloud.gs.GridStore;
import com.toshiba.mwcloud.gs.GridStoreFactory;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
@Service
public class GridDbService {
private final Environment env;
public GridDbService(Environment env) {
this.env = env;
}
public boolean containerExists(String containerName) throws GSException {
Properties props = new Properties();
props.setProperty("notificationProvider",
env.getRequiredProperty("griddb.notification-provider"));
props.setProperty("clusterName",
env.getRequiredProperty("griddb.cluster-name"));
props.setProperty("database",
env.getRequiredProperty("griddb.database"));
props.setProperty("user",
env.getRequiredProperty("griddb.user"));
props.setProperty("password",
env.getRequiredProperty("griddb.password"));
props.setProperty("connectionRoute", "PUBLIC");
try (GridStore store =
GridStoreFactory.getInstance().getGridStore(props)) {
return store.getContainerInfo(containerName) != null;
}
}
}
示例将完整的 Provider URL 作为 Properties 的字符串值直接传入,与官方 Cloud Java 示例的用法一致。不要将 Web API URL 当作 Notification Provider URL,也不要保留旧的组播发现参数。使用私网接入时,按实例要求调整示例中的 connectionRoute。
验证连接并排查失败原因
调用 containerExists 时,传入目标数据库中已知存在的容器名称。返回 true 表示本次容器信息读取成功,返回 false 表示未找到该容器。出现网络、认证或权限异常时,根据抛出的 GSException 排查。
仅调用 getGridStore(props) 不能确认数据库认证成功;认证会在实际访问节点时发生。单个 GridStore 不保证线程安全,不能让多个请求线程随意并发使用同一实例。GridDB Java API Reference
如果仍然连接失败,按以下顺序检查:
- Provider URL 是否完整,是否误用了控制台地址或 Web API 地址。
- 集群名、数据库名和完整数据库用户名是否准确,用户是否具有访问权限。
- 公网模式下,出口 IP 是否获准访问,
connectionRoute是否设为PUBLIC;私网模式下,应用是否能访问实例网络。 - Cloud 配套依赖是否已打包进运行环境,SSL 配置是否符合所用客户端和实例的要求。
原问题没有提供 Cloud 版本、网络模式或实际异常,无法给出可直接使用的端点和凭据。这些值需要从对应实例获取。
备注:内容仅供参考。
