1. 概述

在这个教程中,我们将学习如何在不依赖运行数据库的情况下启动Spring Boot应用。

默认情况下,如果我们的Spring Boot应用包含Spring Data JPA,那么应用会自动尝试建立数据库连接。但在应用启动时没有数据库可用的情况下,可能需要避免这种情况。

2. 设置

我们将使用一个简单的Spring Boot应用,它使用MySQL。让我们来看看设置应用的步骤。

2.1. 依赖项

pom.xml文件中添加Spring Data JPA启动器MySQL连接器依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

这将JPA、MySQL连接器和Hibernate添加到类路径中。

此外,我们希望在应用启动时有一个任务持续运行。为此,我们在pom.xml文件中添加Web启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这会在8080端口启动一个web服务器并保持应用运行。

2.2. 配置

在启动应用之前,我们需要在application.properties文件中设置一些必备的属性:

spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

让我们理解我们设置的属性:

  • spring.datasource.url: 数据库服务器的URL和数据库名称。
  • spring.datasource.driver-class-name: 驱动程序类名。MySQL连接器提供了这个驱动。
  • spring.jpa.properties.hibernate.dialect: 我们设置为MySQL,告诉JPA提供者使用MySQL方言。

除了这些,还需要设置连接数据库所需的用户名和密码:

spring.datasource.username=root
spring.datasource.password=root

2.3. 启动应用

如果我们启动应用,会看到以下错误:

HHH000342: Could not obtain connection to query metadata
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

这是因为指定的URL处没有运行数据库服务器。然而,应用的默认行为是执行以下操作:

  • JPA尝试连接到数据库服务器并获取元数据
  • Hibernate如果不存在,会尝试创建数据库。 这是因为默认情况下spring.jpa.hibernate.ddl-auto属性设置为create

3. 不依赖数据库运行

为了继续而无需数据库,我们需要覆盖上述两个默认行为。

首先,禁用元数据获取

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

然后,禁用自动数据库创建

spring.jpa.hibernate.ddl-auto=none

通过设置这个属性,我们已禁用了数据库的创建。因此应用没有理由建立连接

现在,当我们启动应用时,它不会出现任何错误。除非有与数据库交互的操作,否则不会发起连接。

4. 总结

在这篇文章中,我们了解了如何在不需要运行数据库的情况下启动Spring Boot应用。

我们研究了应用的默认行为,即寻找数据库连接。然后我们通过覆盖两个属性来修复了默认行为。

如往常一样,本文中的代码示例可在GitHub上找到。