使用Spring Boot实现数据库集成配置案例

在本指南中,我们将揭开 Spring Boot 无缝数据库集成背后的魔力。我们将探索如何连接到 MySQL、PostgreSQL 等流行数据库,甚至MongoDB等NoSQL选项。忘记繁琐的配置和神秘的错误消息 - 我们在这里让您的数据库连接变得轻而易举。因此,拿起您最喜欢的饮料,系好安全带,让我们深入了解 Spring Boot 和数据库的世界 - 构建出色应用程序的完美搭配!

为什么使用 Spring Boot 进行数据库集成?
Spring Boot 消除了将应用程序连接到数据库的麻烦。它与传统方法的比较如下:

  • 根据application.properties或application.yml中的属性自动配置。
  • 得益于 Spring Data 抽象,数据访问所需的代码最少。
  • Spring Boot 通过各种数据库的入门项目简化了依赖管理。

具体:

  • 配置:传统方法中,您可能需要在多个文件中写入数据库 URL、用户名和密码等配置细节。Spring Boot 依靠单个文件(如 application.properties)中的属性自动完成了这一工作。
  • 模板代码:为连接、查询和保存数据等基本功能编写代码可能会很重复。Spring Boot 的 Spring Data 抽象为这些任务提供了快捷方式,最大限度地减少了您需要编写的代码量。
  • 依赖性管理:手动管理数据库驱动程序库并确保它们相互兼容是一件令人头疼的事。Spring Boot 为各种数据库提供了启动项目,负责依赖性管理并确保兼容性。

设置 Spring Boot 项目
1. 项目设置:
Spring Boot 提供了几种快速入门的方法。我们将重点关注两个流行的选项:

  • Spring Initializr ( https://start.spring.io/ ):这个 Web 工具允许您使用所需的依赖项轻松配置基本的 Spring Boot 项目。选择您的首选语言(例如 Java)、打包 (JAR) 以及任何所需的功能(例如 Web)。将生成的项目下载为 ZIP 文件。
  • Spring Boot CLI:如果您更喜欢命令行,可以使用 Spring Boot CLI 创建新项目。有关使用 CLI 的详细说明,请参阅官方 Spring Boot 文档 ( https://spring.io/quickstart )。

2. 包含数据库依赖项:
设置 Spring Boot 项目后,下一步是在项目的构建配置文件中包含必要的数据库驱动程序依赖项。
  • Maven:将您选择的数据库(例如,MySQL、PostgreSQL)的适当依赖项添加到pom.xml该<dependencies>部分中的文件中。您可以在 Spring Boot 官方文档或数据库提供商的网站中找到具体的依赖详细信息。
  • Gradle:build.gradle在块内的文件中包含所需的依赖项dependencies。与Maven类似,具体数据库驱动依赖请参考文档。


连接关系数据库(例如MySQL、PostgreSQL)
Spring Boot 简化了与关系数据库的连接,但有时您的项目需要的不仅仅是最低限度。让我们深入研究如何使用 Spring Boot 配置 MySQL 和 PostgreSQL 连接,并考虑实际场景:

1. 使用自定义连接池属性连接到远程 MySQL 数据库
想象一下您的 MySQL 数据库驻留在一台单独的服务器上。以下是针对此场景配置 Spring Boot 的方法:

配置属性:
我们将使用相同的核心属性(spring.datasource.url、spring.datasource.username和spring.datasource.password),但让我们通过连接池来增添一些趣味:

spring.datasource.url=jdbc:mysql://remote-host:3306/my_database_name?useSSL=false
spring.datasource.username=my_username
spring.datasource.password=my_password

# Custom HikariCP connection pool properties
spring.datasource.hikari.minimumIdle=5  # Minimum number of idle connections
spring.datasource.hikari.maximumPoolSize=10  # Maximum pool size
spring.datasource.hikari.connectionTimeout=20000  # Connection timeout in milliseconds

useSSL=falseURL 中禁用 SSL 加密(请注意您的数据库安全要求)。

HikariCP 是一个流行的连接池库,经常与 Spring Boot 一起使用。这些属性自定义连接池行为:

  • minimumIdle:确保池中至少有 5 个空闲连接可用。
  • maximumPoolSize:设置池中允许的最大连接数(本例中为 10)。
  • connectionTimeout:定义等待池中连接的最长时间(20 秒)。

可能仍然需要 MySQL Connector/J 驱动程序,但大多数 IDE 都会处理依赖关系。请参阅官方文档,了解特定于 HikariCP 的高级连接池配置选项 ( https://github.com/brettwooldridge/HikariCP )。


2. 使用 JPA Dialect 连接到特定的 PostgreSQL 模式
假设您的 PostgreSQL 数据库有多个模式,并且您想要连接到一个特定的模式。 Spring Boot 允许您配置 JPA 以使用适当的方言:

配置属性(application.properties):

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=my_username
spring.datasource.password=my_password

# JPA configuration for specific schema
spring.jpa.properties.hibernate.default_schema=my_schema
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect


解释:

  • URL 连接到postgres数据库,但我们将使用 JPA 来定位其中的特定模式。
  • spring.jpa.properties.hibernate.default_schema=my_schema指示 JPA 使用该my_schema模式进行实体持久性操作。
  • spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect显式地将 JPA 方言设置为 PostgreSQL,确保正确处理特定于 PostgreSQL 的数据类型和功能。

附加配置:
PostgreSQL JDBC 驱动程序,并浏览官方 Spring Data JPA 文档 ( https://spring.io/guides/gs/accessing-data-jpa/ ),以获取适用于各种数据库供应商的更高级 JPA 配置选项。

这些示例展示了 Spring Boot 如何帮助您配置基础之外的数据库连接。

连接到 NoSQL 数据库(例如 MongoDB)
Spring Boot 不会歧视您的数据存储偏好。让我们探索如何连接到流行的 NoSQL 文档数据库 MongoDB:

1. 通过身份验证连接到副本集
想象一下,您的 MongoDB 环境利用副本集来实现高可用性,并且您需要使用凭据进行身份验证:

配置属性:
与关系数据库类似,我们将在以下位置定义属性application.properties:

spring.data.mongodb.uri=mongodb://username:password@replica-set-host-1:27017,replica-set-host-2:27017/my_database_name?replicaSet=myReplicaSet&authenticationSource=admin

解释:

  • spring.data.mongodb.uri:该属性保存整个 MongoDB 连接字符串,对于配置各种连接详细信息非常强大。这是一个细分:
  • mongodb://username:password@:指定用于身份验证的连接协议、用户名和密码。
  • replica-set-host-1:27017,replica-set-host-2:27017:定义以逗号分隔的副本集成员主机名和端口列表(替换为您的实际主机名和端口)。
  • /my_database_name:您要在 MongoDB 中连接的数据库的名称。
  • replicaSet=myReplicaSet:指定要连接的副本集名称。
  • authenticationSource=admin:指示 MongoDB 使用admin数据库进行身份验证。

附加配置:
您可能需要在项目的类路径中使用官方 MongoDB Java 驱动程序 ( https://mongodb.github.io/mongo-java-driver/ )。大多数IDE都可以管理依赖关系,也可以从官网下载。

安全注意事项:避免将敏感凭据直接存储在代码中。考虑环境变量或秘密管理工具以获得更安全的方法。 Spring Boot 可以自动访问以SPRING_DATA_MONGODB_URI.

2. 使用 Spring Data MongoDB 属性配置高级选项
Spring Data MongoDB 提供了额外的属性来微调您的连接:

配置属性(application.properties):

spring.data.mongodb.uri=mongodb://localhost:27017/my_database_name
spring.data.mongodb.connectTimeout=5000  # Milliseconds to wait for connection establishment
spring.data.mongodb.minConnectionsPerHost=2  # Minimum connections per replica set member
spring.data.mongodb.maxConnectionsPerHost=5  # Maximum connections per replica set member


为了便于说明,我们简化了连接字符串(假设本地 MongoDB 实例并且没有身份验证)。

  • spring.data.mongodb.connectTimeout:定义等待建立连接的最长时间(在本例中为 5 秒)。
  • spring.data.mongodb.minConnectionsPerHost和spring.data.mongodb.maxConnectionsPerHost:设置副本集中每个主机允许的最小 (2) 和最大 (5) 连接数,影响连接池行为。

浏览Spring Data MongoDB 文档,获取配置属性的完整列表,以自定义 MongoDB 连接以及与 Spring Data MongoDB 功能交互的各个方面。

这些示例展示了 Spring Boot 在基本设置之外连接到 MongoDB 的灵活性。

测试使用:

@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test") // Use a separate test profile
@IntegrationDataAccessTest
// Optional for data access layer integration testing
public class ProductRepositoryIntegrationTest {

  @Autowired
  private ProductRepository productRepository;

  @Test
  public void testSaveProduct() {
    Product testProduct = new Product(
"New Laptop", 1200.00, "Electronics");

   
//保存产品并验证其在数据库中的持久性
    productRepository.save(testProduct);

    Optional<Product> retrievedProduct = productRepository.findById(testProduct.getId());
    assertTrue(retrievedProduct.isPresent());
    assertEquals(testProduct, retrievedProduct.get());
  }
}

注释:

  • @RunWith(SpringRunner.class):初始化 Spring Boot 测试的测试运行器。
  • @SpringBootTest:启动完整的 Spring Boot 应用程序上下文以进行测试。
  • properties = "spring.profiles.active=test":可以选择使用具有特定配置的单独测试配置文件进行测试(例如,不同的数据库连接详细信息)。
  • @IntegrationDataAccessTest(可选):这样的注释对于涉及数据访问层的集成测试很有帮助。

依赖注入:
  • @Autowired:将ProductRepository实例注入到测试类中,用于与数据库中的产品实体进行交互。

测试方法(testSaveProduct):
  • 创建一个新Product对象用于测试。
  • 使用 保存产品productRepository.save(testProduct)。此操作尝试将产品保留在数据库中。
  • 使用从数据库检索产品productRepository.findById(testProduct.getId())。
  • assert断言检索到的产品存在 ( assertTrue(retrievedProduct.isPresent())) 且与最初保存的产品匹配 ( assertEquals(testProduct, retrievedProduct.get()))。

完成此测试后,您可以使用您首选的测试框架(例如 JUnit)执行它。成功的测试意味着您的 Spring Boot 应用程序可以连接到数据库并使用 JPA 存储库执行基本的 CRUD 操作。