Biên Dịch : Nguyễn Hoàng Đạt - Lớp Java07
Email : hoangdat3179@gmail.com
Bài viết gốc : https://www.baeldung.com/spring-boot-sql-import-files

1.Tổng quan

Spring Boot cho phép chúng ta import dữ liệu mẫu vào database của chúng ta – chủ yếu để chuẩn bị dữ liệu cho các bài test tích hợp. Ra khỏi hộp, có hai khả năng. Chúng ta có thể sử dụng các tập tin import.sql (Hibernate support) hoặc data.sql (Spring JDBC support) để load dữ liệu.

Tuy nhiên, đôi khi chúng ta muốn chia một tệp SQL lớn thành một vài tệp nhỏ hơn, ví dụ: để dễ đọc hơn hoặc chia sẻ một số tệp có dữ liệu init giữa các mô-đun.

Trong hướng dẫn này, chúng tôi sẽ chỉ ra cách thực hiện với cả hai - Hibernate và Spring JDBC.

2. Hỗ trợ Hibernate

Chúng ta có thể xác định các tệp chứa dữ liệu mẫu để tải bằng thuộc tính spring.jpa.properties.hibernate.hbm2ddl.import_files. Nó có thể được đặt trong tệp application.properties bên trong thư mục tài nguyên kiểm tra.

Đây là trong trường hợp chúng tôi muốn tải dữ liệu mẫu chỉ cho các bài kiểm tra JUnit. Giá trị phải là danh sách các tệp được phân tách bằng dấu phẩy để nhập:

spring.jpa.properties.hibernate.hbm2ddl.import_files=import_active_users.sql,import_inactive_users.sql

Cấu hình này sẽ tải dữ liệu mẫu từ hai tệp: import_active_users.sqlimport_inactive_users.sql. Điều quan trọng cần đề cập ở đây là chúng ta phải sử dụng prefix spring.jpa.properties để truyền các giá trị (JPA configuration) đến EntityManagerFactory.

Tiếp theo, chúng tôi sẽ chỉ ra cách chúng tôi có thể làm điều đó với sự hỗ trợ của Spring JDBC.

3. Hỗ trợ Spring JDBC

Cấu hình cho dữ liệu ban đầu và hỗ trợ Spring JDBC rất giống với Hibernate. Chúng ta phải sử dụng thuộc tính spring.sql.init.data-locations:

spring.sql.init.data-locations=import_active_users.sql,import_inactive_users.sql

Đặt giá trị như trên cho kết quả tương tự như trong hỗ trợ Hibernate. Tuy nhiên, một lợi thế đáng kể của giải pháp này là khả năng xác định giá trị bằng cách sử dụng mẫu kiểu Ant:

spring.sql.init.data-locations=import_*_users.sql

Giá trị trên yêu cầu Spring tìm kiếm tất cả các tệp có tên khớp với import_ * _users.sql mẫu và nhập dữ liệu bên trong.

Thuộc tính này đã được giới thiệu trong Spring Boot 2.5.0; trong các phiên bản trước của Spring Boot, chúng ta cần sử dụng thuộc tính spring.datasource.data.

4. Kết luận

Trong bài viết ngắn này, chúng ta đã hướng dẫn cách cấu hình một ứng dụng Spring Boot để load dữ liệu ban đầu từ các tập tin SQL tùy chỉnh. Cuối cùng, chúng tôi đã cho thấy hai khả năng - Hibernate và Spring JDBC. Cả hai đều hoạt động khá tốt và tùy thuộc vào nhà phát triển nên chọn cái nào.