Neo4J 连接在 Spring Boot 2.2.4 中超时但在 2.0.5 中没有
Neo4J connection timed out in Spring Boot 2.2.4 but not in 2.0.5
我正在使用 neo4j 构建一个 Spring 启动应用程序。当我 运行 在 Spring Boot 2.2.4 上连接时,我在连接到已部署的数据库时遇到问题。在另一个使用 Spring Boot 2.0.5 的项目中,它可以工作,但是当我将该项目升级到 2.2.4 时,它也会因同样的异常而中断。
奇怪的是,当使用本地 Docker 图像时,它也适用于本地 2.2.4。
当我尝试使用 bolt://35.xx.xx.xx:7687 形式的 uri 连接到云中已部署的 neo4j 实例时,出现以下异常并且在 Spring Boot 2.2.4 上:
如果我 运行 我的 docker 图片并将连接 uri 更改为 bolt://localhost:7687 它在 Spring 引导 2.2.4.
即使在我的 gitlab CI/CD 管道中,使用管道内的服务也可以使用相同的 neo4j 图像进行测试。
这是我的build.gradle:
这些是有效安装的版本:
我也总是可以使用浏览器连接到我的数据库,这就是为什么我认为它与版本而不是我的云配置有关。
有人知道我必须更改我的配置吗?
提前致谢!
我们 运行 以下版本:
- neo4j 3.5.14
- Spring 启动 2.2.4
- Java 11
编辑 1
正如有人提议的那样,我还设置了一个非常简单的示例应用程序 (https://neo4j.com/developer/java/),仅使用 neo4j 驱动程序 v4 和我的 Neo4J GCP 实例。这工作得很好。
编辑 2
我的 application.properties 看起来像这样:
spring.data.neo4j.uri=bolt://35.xxx.xxx.xxx:7687 # <- in prod
spring.data.neo4j.uri=bolt://localhost:7687 # <- in dev
spring.data.neo4j.uri=bolt://neo4j:7687 # <- in CI/CD
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=****
spring.data.neo4j.embedded.enabled=false
不同的环境被分割成单独的 属性 文件,这些文件设置了 spring 活动配置文件。我总是通过将应用程序 dev.properties 中的本地主机替换为 public ip.
来测试这一点
我的最终设置(和解决方案)是仅使用以下依赖项:
implementation 'org.springframework.boot:spring-boot-starter-data-neo4j'
implementation 'org.neo4j.driver:neo4j-java-driver-spring-boot-starter:4.0.0.1'
并在属性文件中使用以下设置:
org.neo4j.driver.uri=bolt://35.xx.xx.xx:7687
org.neo4j.driver.authentication.username=neo4j
org.neo4j.driver.authentication.password=neo4j
org.neo4j.driver.config.encrypted=false
加密不是问题,但必须将设置设置为 org.neo4j.driver
而不是 org.springramework.boot
依赖项。在存储库中使用 @Query
等仍然需要 springframework 依赖项,这就是为什么我需要两者。
我正在使用 neo4j 构建一个 Spring 启动应用程序。当我 运行 在 Spring Boot 2.2.4 上连接时,我在连接到已部署的数据库时遇到问题。在另一个使用 Spring Boot 2.0.5 的项目中,它可以工作,但是当我将该项目升级到 2.2.4 时,它也会因同样的异常而中断。
奇怪的是,当使用本地 Docker 图像时,它也适用于本地 2.2.4。
当我尝试使用 bolt://35.xx.xx.xx:7687 形式的 uri 连接到云中已部署的 neo4j 实例时,出现以下异常并且在 Spring Boot 2.2.4 上:
如果我 运行 我的 docker 图片并将连接 uri 更改为 bolt://localhost:7687 它在 Spring 引导 2.2.4.
即使在我的 gitlab CI/CD 管道中,使用管道内的服务也可以使用相同的 neo4j 图像进行测试。
这是我的build.gradle:
这些是有效安装的版本:
我也总是可以使用浏览器连接到我的数据库,这就是为什么我认为它与版本而不是我的云配置有关。
有人知道我必须更改我的配置吗?
提前致谢!
我们 运行 以下版本:
- neo4j 3.5.14
- Spring 启动 2.2.4
- Java 11
编辑 1 正如有人提议的那样,我还设置了一个非常简单的示例应用程序 (https://neo4j.com/developer/java/),仅使用 neo4j 驱动程序 v4 和我的 Neo4J GCP 实例。这工作得很好。
编辑 2 我的 application.properties 看起来像这样:
spring.data.neo4j.uri=bolt://35.xxx.xxx.xxx:7687 # <- in prod
spring.data.neo4j.uri=bolt://localhost:7687 # <- in dev
spring.data.neo4j.uri=bolt://neo4j:7687 # <- in CI/CD
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=****
spring.data.neo4j.embedded.enabled=false
不同的环境被分割成单独的 属性 文件,这些文件设置了 spring 活动配置文件。我总是通过将应用程序 dev.properties 中的本地主机替换为 public ip.
来测试这一点我的最终设置(和解决方案)是仅使用以下依赖项:
implementation 'org.springframework.boot:spring-boot-starter-data-neo4j'
implementation 'org.neo4j.driver:neo4j-java-driver-spring-boot-starter:4.0.0.1'
并在属性文件中使用以下设置:
org.neo4j.driver.uri=bolt://35.xx.xx.xx:7687
org.neo4j.driver.authentication.username=neo4j
org.neo4j.driver.authentication.password=neo4j
org.neo4j.driver.config.encrypted=false
加密不是问题,但必须将设置设置为 org.neo4j.driver
而不是 org.springramework.boot
依赖项。在存储库中使用 @Query
等仍然需要 springframework 依赖项,这就是为什么我需要两者。