1.Tổng quan

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng H2 với Spring Boot. Cũng giống như các cơ sở dữ liệu khác,nó có đầy đủ hỗ trợ bên trong hệ sinh thái Spring Boot.

2. Dependencies

Hãy bắt đầu với các h2 and spring-boot-starter-data-jpa dependencies:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

3. Database Configuration

Theo mặc định, Spring Boot cấu hình ứng dụng để kết nối với kho lưu trữ bộ nhớ trong với tên người dùng sa và mật khẩu trống.

Tuy nhiên, chúng ta có thể thay đổi các tham số đó bằng cách thêm các thuộc tính sau vào tệp application.properties:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Ngoài ra, chúng ta cũng có thể sử dụng YAML cho cấu hình cơ sở dữ liệu của ứng dụng bằng cách thêm các thuộc tính tương ứng vào tệp application.yaml:

spring:
  datasource:
    url: jdbc:h2:mem:mydb
    username: sa
    password: password
    driverClassName: org.h2.Driver
  jpa:
    spring.jpa.database-platform: org.hibernate.dialect.H2Dialect

Theo thiết kế, cơ sở dữ liệu bộ nhớ trong dễ thay đổi và dẫn đến mất dữ liệu sau khi khởi động lại ứng dụng.

Chúng ta có thể thay đổi hành vi đó bằng cách sử dụng lưu trữ dựa trên tệp. Để thực hiện việc này, chúng ta cần cập nhật thuộc tính spring.datasource.url:

spring.datasource.url=jdbc:h2:file:/data/demo

Tương tự, trong application.yaml, chúng ta có thể thêm cùng một thuộc tính cho lưu trữ dựa trên tệp:

spring:
  datasource:
    url: jdbc:h2:file:/data/demo

Cơ sở dữ liệu cũng có thể hoạt động ở các chế độ khác.

4.Quá trình hoạt động của cơ sở dữ liệu

Thực hiện các hoạt động CRUD với H2 trong Spring Boot cũng giống như với các cơ sở dữ liệu SQL khác và các hướng dẫn của chúng tôi trong loạt bài Spring Persistence thực hiện rất tốt việc này.

4.1.Khởi tạo nguồn dữ liệu

Chúng ta có thể sử dụng các tập lệnh SQL cơ bản để khởi tạo cơ sở dữ liệu. Để minh chứng điều này, hãy thêm tệp data.sql trong thư mục src / main / resources:

INSERT INTO countries (id, name) VALUES (1, 'USA');
INSERT INTO countries (id, name) VALUES (2, 'France');
INSERT INTO countries (id, name) VALUES (3, 'Brazil');
INSERT INTO countries (id, name) VALUES (4, 'Italy');
INSERT INTO countries (id, name) VALUES (5, 'Canada');

Tại đây, tập lệnh điền vào bảng countries trong lược đồ của chúng tôi với một số dữ liệu mẫu.

Spring Boot sẽ tự động chọn tệp này và chạy nó trên cơ sở dữ liệu được nhúng trong bộ nhớ, chẳng hạn như phiên bản H2 đã được định cấu hình của chúng ta. Đây là một cách tốt để khởi tạo cơ sở dữ liệu cho các mục đích thử nghiệm hoặc khởi tạo.

Chúng ta có thể vô hiệu hóa hành vi mặc định này bằng cách đặt thuộc tính spring.sql.init.mode thành never. Ngoài ra, nhiều tệp SQL cũng có thể được cấu hình để tải dữ liệu ban đầu.

Bài viết của chúng tôi về việc tải dữ liệu ban đầu đề cập đến chủ đề này một cách chi tiết hơn.

4.2. Hibernate và data.sql

Theo mặc định, tập lệnh data.sql thực thi trước khi khởi tạo Hibernate. Điều này điều chỉnh việc khởi tạo dựa trên tập lệnh với các công cụ di chuyển cơ sở dữ liệu khác như Flyway và Liquibase. Vì chúng ta đang tạo lại lược đồ được tạo bởi Hibernate mỗi lần, chúng ta cần đặt một thuộc tính bổ sung:

spring.jpa.defer-datasource-initialization=true

Điều này sửa đổi hành vi Spring Boot mặc định và điền dữ liệu sau khi lược đồ được tạo bởi Hibernate. Hơn nữa, chúng ta cũng có thể sử dụng tập lệnh schema.sql để xây dựng dựa trên lược đồ do Hibernate tạo trước tập hợp với data.sql. Tuy nhiên, việc kết hợp các cơ chế tạo lược đồ khác nhau này không được khuyến khích.

5.Truy cập Bảng điều khiển H2

Cơ sở dữ liệu H2 có bảng điều khiển GUI được nhúng để duyệt nội dung của cơ sở dữ liệu và chạy các truy vấn SQL. Theo mặc định, bảng điều khiển H2 không được bật trong Spring.

Để kích hoạt nó, chúng ta cần thêm thuộc tính sau vào application.properties:

spring.h2.console.enabled=true

Nếu chúng ta đang sử dụng cấu hình YAML, chúng ta cần thêm thuộc tính vào application.yaml:

spring:
  h2:
    console.enabled: true

Sau đó, sau khi khởi động ứng dụng, chúng ta có thể điều hướng đến http: // localhost: 8080 / h2-console, trang này sẽ hiển thị cho chúng ta một trang đăng nhập.

Trên trang đăng nhập, chúng ta sẽ cung cấp thông tin đăng nhập giống như chúng ta đã sử dụng trong application.properties:

Giao diện đăng nhập vào H2

Khi chúng ta kết nối, chúng ta sẽ thấy một trang web liệt kê tất cả các bảng ở phía bên trái của trang và một hộp văn bản để viết các truy vấn SQL:

giao diện H2 sau đăng nhập thành công

Bảng điều khiển web có tính năng tự động hoàn thành đề xuất các từ khóa SQL. Thực tế là giao diện điều khiển nhẹ nên thuận tiện cho việc kiểm tra trực quan cơ sở dữ liệu hoặc thực thi SQL thô trực tiếp.

Hơn nữa, chúng ta có thể định cấu hình thêm bảng điều khiển bằng cách chỉ định các thuộc tính sau trong application.properties của dự án với các giá trị mong muốn của chúng ta:

spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false

Tương tự như vậy, khi sử dụng cấu hình YAML, chúng ta có thể thêm các thuộc tính trên như:

spring:
  h2:
    console.path: /h2-console
    console.settings.trace: false 
    spring.h2.console.settings.web-allow-others: false

Trong các đoạn mã ở trên, chúng ta đặt đường dẫn bảng điều khiển là /h2-console, có liên quan đến địa chỉ và cổng của ứng dụng đang chạy của chúng ta. Do đó, nếu ứng dụng của chúng ta đang chạy tại http: //localhost:9001, thì bảng điều khiển sẽ có sẵn tại http: //localhost:9001/h2-console.

Hơn nữa, chúng ta đặt spring.h2.console.settings.trace thành false để ngăn đầu ra theo dõi và chúng ta cũng có thể vô hiệu hóa quyền truy cập từ xa bằng cách đặt spring.h2.console.settings.web-allow-others
thành false.

6.Tổng kết

Cơ sở dữ liệu H2 hoàn toàn tương thích với Spring Boot. Chúng ta đã biết cách cấu hình nó và cách sử dụng bảng điều khiển H2 để quản lý cơ sở dữ liệu đang chạy của chúng ta.

Mã nguồn hoàn chỉnh có sẵn trên GitHub.

Tham khảo: https://www.baeldung.com/spring-boot-h2-database