使用Spring Boot實現資料庫整合配置案例

banq發表於2024-05-07

在本指南中,我們將揭開 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/<a> ):這個 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:<font>//remote-host:3306/my_database_name?useSSL=false<i>
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:<font>//localhost:5432/postgres<i>
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:<font>//username:password@replica-set-host-1:27017,replica-set-host-2:27017/my_database_name?replicaSet=myReplicaSet&authenticationSource=admin<i>

解釋:

  • 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:<font>//localhost:27017/my_database_name<i>
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 = <font>"spring.profiles.active=test") // Use a separate test profile<i>
@IntegrationDataAccessTest
// Optional for data access layer integration testing<i>
public class ProductRepositoryIntegrationTest {

  @Autowired
  private ProductRepository productRepository;

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

   
//儲存產品並驗證其在資料庫中的永續性<i>
    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 操作。

相關文章