知識庫 / JPA RSS 訂閱

連接 Java Spring Boot 到 Db2 數據庫

JPA,Spring Boot
HongKong
8
10:48 AM · Dec 06 ,2025

1. 概述

IBM Db2 是一款雲原生、關係型數據庫系統,同時還支持半結構化數據,例如 JSON 和 XML。 它旨在處理大量數據,並具有低延遲。

在本教程中,我們將使用 docker-compose.yml 文件在 Docker 容器內設置 Db2 社區版數據庫服務器。然後,我們將使用其 JDBC 驅動程序在 Spring Boot 應用程序中連接到它。

2. Db2 數據庫

Db2 數據庫以高效處理大量數據和高吞吐量而聞名。它能夠處理結構化和半結構化數據,使其在不同數據模型中用途廣泛。它適用於微服務和單體應用程序。

此外,數據庫系統需要訂閲才能訪問其全部功能。 但是,社區版(Community Edition)可用,但其最大存儲空間為 16 GiB,最多支持四個 CPU 核心。 此版本非常適合測試目的或資源需求有限的小型應用程序。

3. 部署準備

為了開始,我們先為 Spring Boot 應用設置依賴項,並在 Docker 容器內配置 Db2 數據庫服務器。

3.1. Maven 依賴

讓我們通過向 <em>pom.xml</em> 添加以下 Maven 依賴來啓動一個 Spring Boot 應用:spring-boot-starter-webspring-boot-starter-data-jpa

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

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

spring-boot-starter-web 依賴項允許我們創建 Web 應用程序,包括 RESTful API 和 MVC 應用程序。

spring-boot-starter-data-jpa 提供了一個對象關係映射 (ORM) 工具,通過抽象原生查詢來簡化數據庫交互,除非明確定義。

此外,讓我們添加 com.ibm.db2 依賴項到 pom.xml 中:

<dependency>
    <groupId>com.ibm.db2</groupId>
    <artifactId>jcc</artifactId>
    <version>12.1.0.0</version>
</dependency>

com.ibm.db2 依賴項提供 Db2 JDBC 驅動程序,使我們能夠建立與 Db2 數據庫服務器的連接。

3.2. Db2 Docker Compose 文件

此外,我們將在項目根目錄下定義一個 docker-compose.yml 文件,以便在 Docker 容器內運行數據庫服務器:

services:
  db2:
    image: icr.io/db2_community/db2
    container_name: db2server
    hostname: db2server
    privileged: true
    restart: unless-stopped
    ports:
      - "50000:50000"
    environment:
      LICENSE: accept
      DB2INST1_PASSWORD: mypassword
      DBNAME: testdb
      BLU: "false"
      ENABLE_ORACLE_COMPATIBILITY: "false"
      UPDATEAVAIL: "NO"
      TO_CREATE_SAMPLEDB: "false"
    volumes:
      - db2_data:/database
    healthcheck:
      test: ["CMD", "su", "-", "db2inst1", "-c", "db2 connect to testdb || exit 1"]
      interval: 30s
      retries: 5
      start_period: 60s
      timeout: 10s

volumes:
  db2_data:
    driver: local

上述配置拉取最新的 Db2 社區鏡像。同時,它創建了一個用户、設置了密碼並初始化了一個數據庫。在此配置中,用户名是 db2inst1, 密碼是 mypassword, 數據庫名稱是 testdb

接下來,讓我們運行 docker compose up 命令來啓動數據庫服務器。

4. 在 application.properties 文件中定義連接憑據

現在數據庫服務器已啓動,我們將在 application.properties 文件中定義連接詳細信息:

spring.datasource.url=jdbc:db2://localhost:50000/testdb
spring.datasource.username=db2inst1
spring.datasource.password=mypassword
spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver
spring.jpa.database-platform=org.hibernate.dialect.DB2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

這裏,我們定義了數據庫 URL,其中包含主機、端口和我們連接的數據庫名稱。此外,URL 以 jdbc:db2, 結尾,這表示一個 JDBC 子協議,表明連接到 Db2 數據庫

接下來,我們指定用户名和密碼,配置位於 docker-compose.yml 文件中。

重要的是,設置 spring.datasource.driver-class-name 屬性,確保 Spring Boot 加載正確的 Db2 JDBC 驅動程序。

5. 確認連接

接下來,我們將通過將一個記錄持久化到 testdb 來確認與數據庫的連接。

5.1. 實體類

首先,讓我們創建一個名為 Article 的實體類:

@Entity
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String body;
    private String author;

    // standard constructor, getters and setters
}

實體類映射到數據庫表及其列。

接下來,讓我們定義一個倉庫來處理數據庫操作:

public interface ArticleRepository extends JpaRepository<Article, Long> {
}

現在,我們可以通過將倉庫注入到我們的控制器中,將實體持久化到數據庫中。

5.2. 控制器類

此外,讓我們創建一個控制器類:

@RestController
public class ArticleController {
    private final ArticleRepository articleRepository ;

    public ArticleController(ArticleRepository articleRepository) {
        this.articleRepository = articleRepository;
    }
}

在上述代碼中,我們使用構造器注入將倉庫注入到控制器類中。這使得我們可以執行各種數據庫操作,例如保存和檢索文章。

接下來,讓我們實現一個 POST 端點以插入記錄:

@PostMapping("/create-article")
private ResponseEntity<Article> createArticle(@RequestBody Article article, UriComponentsBuilder ucb) {
    Article newArticle = new Article();
    newArticle.setAuthor(article.getAuthor());
    newArticle.setBody(article.getBody());
    newArticle.setTitle(article.getTitle());
    Article savedArticle = articleRepository.save(newArticle);
    URI location = ucb.path("/articles/{id}").buildAndExpand(savedArticle.getId()).toUri();

    return ResponseEntity.created(location).body(savedArticle);
}

在上述代碼中,我們創建了一個端點,該端點接受一個 Article 對象作為請求體,並將其保存到數據庫中。 此外,我們還返回 HTTP 201 (已創建) 狀態碼。

5.3. 集成測試

最後,我們使用 RestTemplate 類編寫一個集成測試,以驗證 POST 請求的行為。

首先,讓我們創建一個集成測試類:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ArticleApplicationIntegrationTest {
}

接下來,讓我們注入 RestTemplate 實例:

@Autowired
TestRestTemplate restTemplate;

然後,我們來編寫一個測試方法,用於發送 POST 請求並驗證響應:

@Test
void givenNewArticleObject_whenMakingAPostRequest_thenReturnCreated() {
    Article article = new Article();
    article.setTitle("Introduction to Java");
    article.setAuthor("Baeldung");
    article.setBody("Java is a programming language created by James Gosling");
    ResponseEntity<Article> createResponse 
      = restTemplate.postForEntity("/create-article", article, Article.class);
    assertThat(createResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);

    URI locationOfNewArticle = createResponse.getHeaders().getLocation();
    ResponseEntity<String> getResponse 
      = restTemplate.getForEntity(locationOfNewArticle, String.class);
    assertThat(getResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
}

在上述代碼中,我們斷言記錄已成功創建,並通過 檢索該記錄時返回 HTTP 200 響應。

6. 結論

本文介紹瞭如何設置 IBM Db2 數據庫並使用 Db2 驅動程序連接到它,該驅動程序配置在 Spring Boot 應用程序的 application.properties 文件中。 此外,我們通過將記錄持久化到數據庫來測試了連接。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.