最近一直在学习 Spring Data Neo4j 的课程,并希望用户能够测试数据库连接。通常,在使用 Spring Data 的Spring Boot 应用程序中,您将数据库凭据设置为application.properties文件中的属性。您可以仅使用这些详细信息来运行应用程序,但只有当数据库 URI 语法不正确时才会失败。应用程序实际上并不测试连接以查看其是否有效并成功连接。
在这篇博文中,我将向您展示如何使用该类中的方法从 Spring Boot 应用程序测试与 Neo4j 数据库的连接driver。
测试连接的方法
您可能会问:“为什么应用程序不测试连接?” 这是因为它不是配置属性,所以我们必须在运行时测试它。有几种不同的方法可以解决这个问题。
- 将 CommandLineRunner 与驱动程序结合使用并使用该verifyConnectivity()方法。
- 将 CommandLineRunner 移至其自己的配置类(更干净)。
- 为使用该verifyConnectivity()方法编写一个测试。
- 编写利用连接的应用程序功能(域、存储库、控制器类)。
最后一个选项是我过去所做的,因为我不仅仅关注连接步骤。但是,它对于测试连接来说并不理想,因为它需要您编写大量不需要的代码。如果连接错误,那么我们必须对更多代码进行故障排除,而实际上可能是其他原因导致了问题。我们只想处理数据库连接。
第一个和第二个选项是我的下一个方法,是非常好的选择,但需要您运行整个应用程序。一旦你有了测试方法,它要么每次都会一起运行,要么你必须注释掉/删除那段代码。
第三个选项是最好的,因为它是一个可以随时运行的测试。它不会增加实际应用程序的开销,并且您可以仅在需要时运行单独的测试。这将是我们的目标,但我还将向您展示如何编写第一个和第二个选项。
方法verifyConnectivity()_
首先我们看一下verifyConnectivity()方法。直到现在我才意识到这个存在,所以我做了一些研究。Java API 文档中的信息表明,它会验证驱动程序是否可以连接到数据库,如果连接失败,则会抛出异常。这正是我们想要的!
该方法是类的一部分Driver,类是 Neo4j Java 驱动程序的一部分。因此,为了执行该verifyConnectivity()方法,我们需要创建一个驱动程序对象。
创建 Spring Boot 项目
让我们首先创建一个 Spring Boot 项目。我喜欢通过Spring Initializr站点来完成此操作。我将使用以下设置:
- 群组:com.jmhreif
- 工件:验证连接
- 依赖项:
- Spring Data Neo4j
下载项目后,在 IDE 中打开它。我们需要做的第一件事是在文件中配置application.properties。
如果您尚未运行 Neo4j 实例,您可以在几分钟内启动 Neo4j Aura 的免费云实例。Neo4j Aura是一项完全托管的云数据库服务。拥有实例后,您可以从 Aura 控制台获取连接 URI。
接下来,打开该application.properties文件并添加以下属性:
spring.neo4j.uri = neo4j+s : //dbhash.databases.neo4j.io
spring.neo4j.authentication.用户名= neo4j
spring.neo4j.authentication.password =测试
spring.data.neo4j.database = neo4j请注意,您至少需要更新 URI 和密码字段以匹配您的实例(用户名和数据库字段是默认值,除非您稍后对其进行自定义)。现在,我们可以创建一个CommandLineRunner类来测试连接。
我们将在本文中介绍的每个选项都位于随附的 GitHub 项目的单独分支中。当我们逐步介绍每个选项时,您可以通过查看该选项的分支来进行操作。分支main是在测试类中使用测试的首选解决方案。
选项 1:使用 CommandLineRunner
项目准备就绪后,我们可以开始添加代码来测试数据库连接。打开主应用程序类(VerifyConnectivityApplication.java,如果您的项目名称是 verify-connectivity )并添加代码,使其与以下类匹配:
@SpringBootApplication
public class VerifyConnectivityApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(VerifyConnectivityApplication.class, args);
}
final Driver driver;
public VerifyConnectivityApplication(@Autowired Driver driver) {
this.driver = driver;
}
public final void run(String... args) {
driver.verifyConnectivity();
}
}我们让我们的类实现该CommandLineRunner接口,以便我们创建的用于测试连接的 bean 在应用程序启动时运行。接下来,我们在第 17 行注入驱动程序,并在第 19 行创建一个使用该驱动程序的构造函数。
不过,第 23 行是我们实际测试连接的地方。我们实现run()方法,它使用Driver对象来调用其verifyConnectivity()方法。如果连接成功,则该方法将返回0成功状态代码。如果连接失败,则该方法将引发异常,并且应用程序将退出并显示错误代码。
我们可以通过运行应用程序来测试这一点。如果输出返回0状态代码,则它按预期工作。application.properties您还可以通过将一些错误数据放入文件的数据库属性中并再次运行应用程序来进行测试,以确保它失败。
在主应用程序类中测试连接并不是最好的解决方案,因为我们已经用测试代码弄乱了我们的主类。我们可以通过将此代码移至其自己的配置类来使其更简洁。
选项 2:设置配置类
我们并没有真正使用此选项更改任何功能,而是将一大块配置代码移动到一个单独的类中。这将使我们能够保持主应用程序类的干净并专注于应用程序的主要功能。
首先,我们需要创建一个新的 Java 类。你可以给它起任何你喜欢的名字,但我把它命名为Config.java. 打开类并复制/粘贴主应用程序类中的代码,以便您的配置类如下所示:
@Configuration
public class Config implements CommandLineRunner {
final Driver driver;
public Config(@Autowired Driver driver) {
this.driver = driver;
}
public final void run(String... args) {
driver.verifyConnectivity();
}
}确保从主类中删除复制的代码,然后再次测试应用程序。当状态代码表示成功时,它仍然应该像以前一样工作0,但现在我们已将连接测试代码分离到应用程序自己的配置部分中。
该解决方案也并不理想,因为我们仍然必须运行整个应用程序来测试连接。我们可以通过在测试类中编写测试来做得更好,以便它仅在我们需要检查该功能时运行。
选项 3:编写测试
第三种选择是最好的选择。它不会增加实际应用程序的开销,我们可以根据需要运行单独的测试。为此,我们需要打开该VerifyConnectivityApplicationTests.java文件并添加以下代码:
@SpringBootTest
class VerifyConnectivityApplicationTests {
final Driver driver;
public VerifyConnectivityApplicationTests(@Autowired Driver driver) {
this.driver = driver;
}
@Test
final void testConnection() {
driver.verifyConnectivity();
}
}您还需要删除该类Config.java,因为我们不再需要它。现在,我们可以运行测试,它将验证连接。如果连接成功,则测试通过。如果连接失败,则测试将失败。您可以更改 中的值application.properties来验证是否获得成功和失败的预期结果。
这个版本的代码更加简洁,并且由于我们想要测试连接,因此将其放在测试类中是有意义的。为了进行更严格、更全面的应用程序测试,我们可以通过使用 Neo4jharness 或 Testcontainers 等测试套件进一步改进,但这超出了本博客文章的范围。在我们的例子中,创建一个简单的测试来验证我们的应用程序是否可以连接到数据库就足够了。
总结
江河入海,知识涌动,这是我参与江海计划的第10篇。
我最近一直在致力于 Spring Data Neo4j 的自定进度学习课程,并希望用户能够测试数据库连接。通常,在使用 Spring Data 的Spring Boot 应用程序中,您将数据库凭据设置为application.properties文件中的属性。您可以仅使用这些详细信息来运行应用程序,但只有当数据库 URI 语法不正确时才会失败。应用程序实际上并不测试连接以查看其是否有效并成功连接。
在这篇博文中,我将向您展示如何使用该类中的方法从 Spring Boot 应用程序测试与 Neo4j 数据库的连接driver。
测试连接的方法
您可能会问:“为什么应用程序不测试连接?” 这是因为它不是配置属性,所以我们必须在运行时测试它。有几种不同的方法可以解决这个问题。
- 将 CommandLineRunner 与驱动程序结合使用并使用该verifyConnectivity()方法。
- 将 CommandLineRunner 移至其自己的配置类(更干净)。
- 为使用该verifyConnectivity()方法编写一个测试。
- 编写利用连接的应用程序功能(域、存储库、控制器类)。
最后一个选项是我过去所做的,因为我不仅仅关注连接步骤。但是,它对于测试连接来说并不理想,因为它需要您编写大量不需要的代码。如果连接错误,那么我们必须对更多代码进行故障排除,而实际上可能是其他原因导致了问题。我们只想处理数据库连接。
第一个和第二个选项是我的下一个方法,是非常好的选择,但需要您运行整个应用程序。一旦你有了测试方法,它要么每次都会一起运行,要么你必须注释掉/删除那段代码。
第三个选项是最好的,因为它是一个可以随时运行的测试。它不会增加实际应用程序的开销,并且您可以仅在需要时运行单独的测试。这将是我们的目标,但我还将向您展示如何编写第一个和第二个选项。
方法verifyConnectivity()_
首先我们看一下verifyConnectivity()方法。直到现在我才意识到这个存在,所以我做了一些研究。Java API 文档中的信息表明,它会验证驱动程序是否可以连接到数据库,如果连接失败,则会抛出异常。这正是我们想要的!
该方法是类的一部分Driver,类是 Neo4j Java 驱动程序的一部分。因此,为了执行该verifyConnectivity()方法,我们需要创建一个驱动程序对象。
创建 Spring Boot 项目
让我们首先创建一个 Spring Boot 项目。我喜欢通过Spring Initializr站点来完成此操作。我将使用以下设置:
- 群组:com.jmhreif
- 工件:验证连接
- 依赖项:
- Spring Data Neo4j
下载项目后,在 IDE 中打开它。我们需要做的第一件事是在文件中配置application.properties。
如果您尚未运行 Neo4j 实例,您可以在几分钟内启动 Neo4j Aura 的免费云实例。Neo4j Aura是一项完全托管的云数据库服务。拥有实例后,您可以从 Aura 控制台获取连接 URI。
接下来,打开该application.properties文件并添加以下属性:
spring.neo4j.uri = neo4j+s : //dbhash.databases.neo4j.io
spring.neo4j.authentication.用户名= neo4j
spring.neo4j.authentication.password =测试
spring.data.neo4j.database = neo4j请注意,您至少需要更新 URI 和密码字段以匹配您的实例(用户名和数据库字段是默认值,除非您稍后对其进行自定义)。现在,我们可以创建一个CommandLineRunner类来测试连接。
我们将在本文中介绍的每个选项都位于随附的 GitHub 项目的单独分支中。当我们逐步介绍每个选项时,您可以通过查看该选项的分支来进行操作。分支main是在测试类中使用测试的首选解决方案。
选项 1:使用 CommandLineRunner
项目准备就绪后,我们可以开始添加代码来测试数据库连接。打开主应用程序类(VerifyConnectivityApplication.java,如果您的项目名称是 verify-connectivity )并添加代码,使其与以下类匹配:
@SpringBootApplication
public class VerifyConnectivityApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(VerifyConnectivityApplication.class, args);
}
final Driver driver;
public VerifyConnectivityApplication(@Autowired Driver driver) {
this.driver = driver;
}
public final void run(String... args) {
driver.verifyConnectivity();
}
}我们让我们的类实现该CommandLineRunner接口,以便我们创建的用于测试连接的 bean 在应用程序启动时运行。接下来,我们在第 17 行注入驱动程序,并在第 19 行创建一个使用该驱动程序的构造函数。
不过,第 23 行是我们实际测试连接的地方。我们实现run()方法,它使用Driver对象来调用其verifyConnectivity()方法。如果连接成功,则该方法将返回0成功状态代码。如果连接失败,则该方法将引发异常,并且应用程序将退出并显示错误代码。
我们可以通过运行应用程序来测试这一点。如果输出返回0状态代码,则它按预期工作。application.properties您还可以通过将一些错误数据放入文件的数据库属性中并再次运行应用程序来进行测试,以确保它失败。
在主应用程序类中测试连接并不是最好的解决方案,因为我们已经用测试代码弄乱了我们的主类。我们可以通过将此代码移至其自己的配置类来使其更简洁。
选项 2:设置配置类
我们并没有真正使用此选项更改任何功能,而是将一大块配置代码移动到一个单独的类中。这将使我们能够保持主应用程序类的干净并专注于应用程序的主要功能。
首先,我们需要创建一个新的 Java 类。你可以给它起任何你喜欢的名字,但我把它命名为Config.java. 打开类并复制/粘贴主应用程序类中的代码,以便您的配置类如下所示:
@Configuration
public class Config implements CommandLineRunner {
final Driver driver;
public Config(@Autowired Driver driver) {
this.driver = driver;
}
public final void run(String... args) {
driver.verifyConnectivity();
}
}确保从主类中删除复制的代码,然后再次测试应用程序。当状态代码表示成功时,它仍然应该像以前一样工作0,但现在我们已将连接测试代码分离到应用程序自己的配置部分中。
该解决方案也并不理想,因为我们仍然必须运行整个应用程序来测试连接。我们可以通过在测试类中编写测试来做得更好,以便它仅在我们需要检查该功能时运行。
选项 3:编写测试
第三种选择是最好的选择。它不会增加实际应用程序的开销,我们可以根据需要运行单独的测试。为此,我们需要打开该VerifyConnectivityApplicationTests.java文件并添加以下代码:
@SpringBootTest
class VerifyConnectivityApplicationTests {
final Driver driver;
public VerifyConnectivityApplicationTests(@Autowired Driver driver) {
this.driver = driver;
}
@Test
final void testConnection() {
driver.verifyConnectivity();
}
}您还需要删除该类Config.java,因为我们不再需要它。现在,我们可以运行测试,它将验证连接。如果连接成功,则测试通过。如果连接失败,则测试将失败。您可以更改 中的值application.properties来验证是否获得成功和失败的预期结果。
这个版本的代码更加简洁,并且由于我们想要测试连接,因此将其放在测试类中是有意义的。为了进行更严格、更全面的应用程序测试,我们可以通过使用 Neo4jharness 或 Testcontainers 等测试套件进一步改进,但这超出了本博客文章的范围。在我们的例子中,创建一个简单的测试来验证我们的应用程序是否可以连接到数据库就足够了。
总结
在今天的文章中,我们了解了如何使用该verifyConnectivity()方法来测试 Spring Boot 应用程序与 Neo4j 数据库的连接。我们看到了三种不同的方法,以及每种方法的优缺点。我们还讨论了为什么最好的选择是利用测试类并编写测试。如果连接成功,则测试通过。如果连接失败,则测试失败,我们可以排查连接细节。在今天的文章中,我们了解了如何使用该verifyConnectivity()方法来测试 Spring Boot 应用程序与 Neo4j 数据库的连接。我们看到了三种不同的方法,以及每种方法的优缺点。我们还讨论了为什么最好的选择是利用测试类并编写测试。如果连接成功,则测试通过。如果连接失败,则测试失败,我们可以排查连接细节。




