1.3.5 Tìm hiểu Spring Boot DevTools
Như tên gọi của nó, DevTools cung cấp cho các nhà phát triển Spring một số công cụ hữu ích trong thời gian phát triển. Trong số đó bao gồm:
- Tự động khởi động lại ứng dụng khi mã thay đổi
- Tự động làm mới trình duyệt khi tài nguyên dành cho trình duyệt (chẳng hạn như template, JavaScript, stylesheet, v.v.) thay đổi
- Tự động vô hiệu hóa bộ nhớ đệm template
- Tích hợp sẵn H2 Console, nếu đang sử dụng cơ sở dữ liệu H2
Điều quan trọng cần hiểu là DevTools không phải là một plugin của IDE, cũng không yêu cầu bạn phải sử dụng một IDE cụ thể. Nó hoạt động tốt với Spring Tool Suite, IntelliJ IDEA, và NetBeans. Hơn nữa, vì nó chỉ được thiết kế cho mục đích phát triển, nên nó đủ thông minh để tự vô hiệu hóa khi triển khai trong môi trường production. Chúng ta sẽ thảo luận cách mà DevTools làm điều này khi bạn triển khai ứng dụng trong chương 18. Hiện tại, hãy tập trung vào những tính năng hữu ích nhất của Spring Boot DevTools, bắt đầu với khả năng khởi động lại ứng dụng tự động.
KHỞI ĐỘNG LẠI ỨNG DỤNG TỰ ĐỘNG
Khi DevTools là một phần của dự án của bạn, bạn sẽ có thể thay đổi mã Java và các file cấu hình (properties) trong dự án và thấy những thay đổi đó được áp dụng sau một thời gian ngắn. DevTools giám sát các thay đổi, và khi phát hiện có thay đổi, nó sẽ tự động khởi động lại ứng dụng.
Cụ thể hơn, khi DevTools được kích hoạt, ứng dụng sẽ được nạp vào hai class loader riêng biệt trong máy ảo Java (JVM). Một class loader sẽ nạp mã Java, các file cấu hình và hầu hết mọi thứ trong đường dẫn src/main/ của dự án. Đây là những thứ thường xuyên thay đổi. Class loader còn lại sẽ nạp các thư viện phụ thuộc, thứ không thay đổi thường xuyên.
Khi phát hiện thay đổi, DevTools chỉ tải lại class loader chứa mã nguồn dự án và khởi động lại Spring application context, trong khi giữ nguyên class loader còn lại và JVM. Chiến lược này giúp giảm thời gian khởi động lại ứng dụng một chút.
Điểm bất lợi của chiến lược này là các thay đổi đối với thư viện phụ thuộc sẽ không được áp dụng trong lần khởi động lại tự động. Đó là vì class loader chứa thư viện phụ thuộc không được tải lại tự động. Bất cứ khi nào bạn thêm, thay đổi hoặc xoá một thư viện trong file cấu hình build, bạn sẽ cần khởi động lại ứng dụng theo cách thủ công để áp dụng các thay đổi đó.
TỰ ĐỘNG LÀM MỚI TRÌNH DUYỆT VÀ VÔ HIỆU HOÁ BỘ NHỚ ĐỆM TEMPLATE
Theo mặc định, các engine template như Thymeleaf và FreeMarker được cấu hình để lưu bộ đệm kết quả của việc phân tích template, để không cần phải phân tích lại với mỗi request. Điều này rất tốt trong môi trường production, vì nó giúp cải thiện hiệu suất.
Tuy nhiên, bộ nhớ đệm template không thực sự phù hợp trong quá trình phát triển. Nó khiến bạn không thể thấy được các thay đổi của template ngay khi ứng dụng đang chạy và làm mới trình duyệt. Ngay cả khi bạn đã thay đổi, template được lưu trong bộ đệm vẫn sẽ được sử dụng cho đến khi bạn khởi động lại ứng dụng.
DevTools giải quyết vấn đề này bằng cách tự động vô hiệu hóa tất cả bộ nhớ đệm template. Bạn có thể thay đổi template bao nhiêu cũng được và chỉ cần làm mới trình duyệt là sẽ thấy kết quả.
Nhưng nếu bạn giống tôi, bạn thậm chí không muốn phải nhấn nút làm mới trình duyệt. Sẽ tuyệt hơn nếu bạn có thể thay đổi và thấy ngay kết quả trong trình duyệt. May mắn thay, DevTools có một tính năng đặc biệt dành cho những người “lười nhấn nút làm mới”.
DevTools tự động kích hoạt một máy chủ LiveReload (http://livereload.com/) cùng với ứng dụng của bạn. Bản thân máy chủ LiveReload thì không hữu ích lắm. Nhưng khi được kết hợp với plugin LiveReload tương ứng trên trình duyệt, nó sẽ khiến trình duyệt của bạn tự động làm mới khi có thay đổi với các template, hình ảnh, stylesheet, JavaScript, v.v. — nói chung là gần như bất cứ thứ gì được gửi tới trình duyệt của bạn.
LiveReload có plugin trình duyệt cho Google Chrome, Safari và Firefox. (Rất tiếc cho các fan của Internet Explorer và Edge.) Truy cập http://livereload.com/extensions/ để tìm thông tin về cách cài đặt LiveReload cho trình duyệt của bạn.
H2 CONSOLE TÍCH HỢP SẴN
Mặc dù dự án của bạn hiện chưa sử dụng cơ sở dữ liệu, điều đó sẽ thay đổi trong chương 3. Nếu bạn chọn sử dụng cơ sở dữ liệu H2 trong quá trình phát triển, DevTools cũng sẽ tự động kích hoạt một console H2 mà bạn có thể truy cập từ trình duyệt web. Bạn chỉ cần mở trình duyệt và truy cập http://localhost:8080/h2-console để xem dữ liệu mà ứng dụng của bạn đang làm việc cùng.
Đến thời điểm này, bạn đã viết được một ứng dụng Spring hoàn chỉnh, mặc dù đơn giản. Bạn sẽ mở rộng nó trong suốt phần còn lại của cuốn sách. Nhưng bây giờ là thời điểm tốt để nhìn lại những gì bạn đã hoàn thành và cách Spring đã hỗ trợ bạn trong quá trình đó.
