You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot(Java)中对接使用Amazon Neptune数据库?

Spring Boot(Java)对接Amazon Neptune完整流程

1. 引入核心依赖

你可以根据自己使用的查询类型(Gremlin/SPARQL)选择对应依赖,绝大多数场景下Neptune使用Gremlin做图查询,Maven依赖配置如下:

<!-- Spring Boot 基础依赖(按需引入对应场景的starter即可) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Gremlin 官方驱动,版本必须和你使用的Neptune引擎支持的TinkerPop版本匹配 -->
<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>gremlin-driver</artifactId>
    <version>3.6.4</version>
</dependency>
<!-- 若你的Neptune开启了IAM身份认证,额外添加以下两个依赖 -->
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>auth</artifactId>
    <version>2.20.0</version>
</dependency>
<dependency>
    <groupId>software.amazon.neptune</groupId>
    <artifactId>amazon-neptune-sigv4-signer</artifactId>
    <version>2.4.0</version>
</dependency>

2. 配置连接参数

在application.yml或application.properties中添加Neptune连接配置,你可以直接复用之前原生Java连接时使用的参数:

neptune:
  endpoint: 你的Neptune集群端点地址
  port: 8182 # Neptune默认端口
  enable-iam-auth: false # 开启IAM认证则设为true
  region: 你的Neptune所在AWS区域
  pool-size: 5 # 连接池大小可按业务调整

3. 配置Gremlin客户端托管到Spring容器

编写配置类将连接客户端和查询源声明为Spring Bean,避免重复创建连接:

import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
// IAM认证需要额外导入以下类
import software.amazon.neptune.driver.auth.NeptuneNettyHttpSigV4Signer;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

@Configuration
public class NeptuneConfig {
    @Value("${neptune.endpoint}")
    private String endpoint;
    @Value("${neptune.port}")
    private Integer port;
    @Value("${neptune.enable-iam-auth}")
    private Boolean enableIamAuth;
    @Value("${neptune.region}")
    private String region;
    @Value("${neptune.pool-size}")
    private Integer poolSize;

    @Bean
    public Cluster neptuneCluster() {
        Cluster.Builder clusterBuilder = Cluster.build()
                .addContactPoint(endpoint)
                .port(port)
                .enableSsl(true) // Neptune默认强制SSL连接,不可关闭
                .maxConnectionPoolSize(poolSize);

        // 开启IAM认证时添加签名拦截器
        if(enableIamAuth) {
            clusterBuilder.handshakeInterceptor(
                    new NeptuneNettyHttpSigV4Signer(region, DefaultCredentialsProvider.create())
            );
        }
        return clusterBuilder.create();
    }

    @Bean
    public GraphTraversalSource graphTraversalSource(Cluster neptuneCluster) {
        // "g"对应Neptune默认的查询根,和你在工作台使用的前缀一致
        return traversal().withRemote(DriverRemoteConnection.using(neptuneCluster, "g"));
    }
}

4. 业务代码调用查询

直接注入GraphTraversalSource即可执行你在Neptune工作台写的任意Gremlin查询,语法完全一致:

import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;

@Service
public class NeptuneBizService {
    @Autowired
    private GraphTraversalSource g;

    // 示例:查询所有label为Person的顶点的name属性
    public List<String> getAllPersonNames() {
        // 语句和工作台写的Gremlin完全一致
        return g.V().hasLabel("Person").values("name").toList();
    }

    // 示例:执行带条件的自定义查询返回属性映射
    public List<Map<Object, Object>> getPersonByAge(Integer minAge) {
        return g.V().hasLabel("Person").has("age", gte(minAge)).valueMap().toList();
    }
}

注意事项

  • 若你使用SPARQL查询RDF数据,无需引入Gremlin驱动,直接用RestTemplate/Feign调用Neptune的SPARQL HTTP接口即可,IAM认证的话在请求头加上SigV4签名即可
  • 生产环境不要硬编码AK/SK,AWS环境内部署的应用直接使用实例角色自动获取凭证即可
  • 本地开发时确保你的网络已经打通Neptune所在VPC,或者使用SSH隧道代理,这和你之前原生Java连接的要求一致

内容的提问来源于stack exchange,提问作者Tien Vu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:15:03