mall: Hệ Thống Thương Mại Điện Tử Tham Khảo
mall là hệ thống thương mại điện tử tham khảo viết bằng Java, kết hợp cửa hàng cho khách với hệ thống quản trị nội bộ, chạy trên Spring Boot và MyBatis, triển khai qua Docker. Hãy chọn mall để thấy kiến trúc Spring Boot theo module, tìm kiếm sản phẩm và luồng đơn hàng ráp sẵn trong một codebase; bỏ qua nếu bạn cần cửa hàng sẵn sàng production, được bảo trì liên tục, vì README mô tả mall như một minh hoạ, không phải dịch vụ để bán hàng ngay.
Tìm Hiểu Hệ Thống Thương Mại Điện Tử mall
mall là một hệ thống thương mại điện tử mã nguồn mở do macrozheng xây dựng, gộp một cửa hàng dành cho khách hàng và một hệ thống quản trị nội bộ trong cùng một codebase Java. Module cửa hàng bao gồm trang chủ, tìm kiếm sản phẩm, giỏ hàng và luồng đơn hàng; module quản trị xử lý sản phẩm, đơn hàng, hội viên, khuyến mãi và báo cáo thống kê. Cả hai đều chạy trên Spring Boot và MyBatis, dùng Elasticsearch để tìm kiếm và Docker để triển khai.
Các Module Cốt Lõi Và Chức Năng
- ✓Hai service Spring Boot tách theo vai trò: mall-portal phục vụ cửa hàng cho khách (trang chủ, tìm kiếm sản phẩm, giỏ hàng, luồng đơn hàng, trung tâm hội viên, chăm sóc khách hàng), còn mall-admin phục vụ hệ thống quản trị (sản phẩm, đơn hàng, hội viên, khuyến mãi, vận hành, nội dung, báo cáo, tài chính, phân quyền, cài đặt), theo README.
- ✓mall-search là module riêng dựa trên Elasticsearch để tìm kiếm sản phẩm, tách biệt khỏi hai service giao dịch mall-portal và mall-admin.
- ✓Các module dùng chung mall-common (code tiện ích), mall-mbg (code do MyBatis Generator sinh ra), và mall-security (lớp bọc Spring Security) tách phần code chung ra thay vì lặp lại ở từng service.
- ✓Bộ công nghệ backend theo README gồm MyBatis và MyBatis Generator cho tầng dữ liệu, RabbitMQ cho message queue, Redis và MongoDB cho lưu trữ, Druid cho connection pool, JWT cho đăng nhập, và SpringDoc cho tài liệu API.
- ✓Log được thu thập qua Logstash và Kibana kết hợp Elasticsearch (ELK), có hướng dẫn thiết lập riêng được dẫn link từ README.
- ✓Lưu trữ file hỗ trợ cả Alibaba Cloud OSS lẫn MinIO, theo bảng lựa chọn công nghệ.
- ✓Hai repo front-end riêng đi kèm backend: mall-admin-web (Vue và Element cho giao diện quản trị) và mall-app-web (Vue và uni-app, dựng cho bản demo cửa hàng ở giao diện di động).
- ✓Một repo song song, mall-swarm, ghi lại phiên bản vi dịch vụ của cùng hệ thống này, xây trên Spring Cloud Alibaba.
Thiết Lập Dự Án mall
Phạm vi thiết lập tuỳ vào bạn muốn chạy phần nào. README nói rằng nếu chỉ khởi động module mall-admin thì chỉ cần cài MySQL và Redis; chạy toàn bộ hệ thống sẽ kéo theo cả bộ công nghệ còn lại. Việc triển khai được tài liệu hoá qua các hướng dẫn riêng được dẫn link thay vì liệt kê lệnh ngay trong README: một hướng dẫn cho Windows, một cho Docker, một cho Docker Compose, và một cho triển khai tự động qua Jenkins trên Linux. Bảng môi trường phát triển trong README liệt kê các phiên bản dự án được build cùng: JDK 17, MySQL 5.7, Redis 7.0, MongoDB 5.0, RabbitMQ 3.10.5, Nginx 1.22, và Elasticsearch, Logstash, Kibana đều ở bản 7.17.3. README cũng nói branch master chạy trên Spring Boot 3.5 và JDK 17, còn branch dev-v2 riêng nhắm tới Spring Boot 2.7 và JDK 8 cho môi trường cũ hơn. Hãy coi các hướng dẫn tại macrozheng.com là nguồn chính xác cho từng lệnh cụ thể, vì bản thân README không liệt kê chi tiết.
Điểm mạnh
- ✓Bao phủ cả hai nửa của một hệ thống thương mại điện tử, cửa hàng cho khách và hệ thống quản trị nội bộ, trong cùng một repo, thay vì chỉ là một khung API trống.
- ✓Cách chia module (mall-common, mall-mbg, mall-security, mall-search) phản ánh cách một đội Java thực tế tách code dùng chung, code truy cập dữ liệu tự sinh, và tìm kiếm ra khỏi logic nghiệp vụ.
- ✓Việc triển khai được tài liệu hoá qua bốn hướng riêng: Windows, Docker, Docker Compose, và tự động hoá bằng Jenkins.
- ✓Dự án song song mall-swarm cho bạn một phiên bản vi dịch vụ của cùng hệ thống để so sánh, từ cùng tác giả.
- ✓Giấy phép Apache-2.0 cho phép dùng trong sản phẩm thương mại phái sinh mà không kèm ràng buộc copyleft.
Những Thách Thức Và Điều Cần Lưu Ý
- △Các lệnh thiết lập và chạy cụ thể không nằm trong README, mà được dẫn hoàn toàn sang các hướng dẫn trên trang macrozheng.com, nên bạn phụ thuộc vào việc trang đó luôn được cập nhật.
- △README mô tả mall như một minh hoạ cho bộ công nghệ Java thương mại điện tử phổ biến, không khẳng định đây là phần mềm đã sẵn sàng production, nên hãy xem nó như một dự án tham khảo để học hoặc fork, chứ không phải cửa hàng cài vào là chạy được ngay.
- △Chạy toàn bộ hệ thống nghĩa là phải dựng cùng lúc MySQL, Redis, MongoDB, RabbitMQ, Elasticsearch, Logstash và Kibana, một bộ khá nhiều thành phần cho môi trường local, dù đường chỉ chạy mall-admin chỉ cần MySQL và Redis.
- △Branch master yêu cầu JDK 17 và Spring Boot 3.5, nên các đội còn dùng JDK 8 phải chuyển sang branch dev-v2 riêng; hai branch này không thay thế cho nhau được.
- △Tài liệu chính và kênh cộng đồng của dự án, một tài khoản công chúng WeChat, đều ưu tiên tiếng Trung theo README, điều này gây khó khăn cho người chỉ đọc được tiếng Anh.
- △README và các dữ kiện của repo không nhắc tới bộ test tự động hay badge CI nào, nên độ phủ test không được ghi lại.
Khám Phá Các Dự Án Liên Quan
Câu Hỏi Thường Gặp Về mall
mall dùng Spring Boot và MyBatis cho backend, Spring Security cho xác thực, Elasticsearch để tìm kiếm sản phẩm, RabbitMQ cho message queue, Redis và MongoDB cho dữ liệu, tất cả được triển khai qua Docker, theo bảng lựa chọn công nghệ trong README.
README của mall dẫn link tới các hướng dẫn triển khai riêng cho Windows, Docker, Docker Compose, và triển khai tự động qua Jenkins trên Linux thay vì liệt kê lệnh ngay trong README, nên các hướng dẫn đó là nguồn chính xác.
mall có một dự án song song tên mall-swarm, xây trên Spring Cloud Alibaba, được README dẫn link như phiên bản vi dịch vụ của cùng hệ thống này.
mall chia thành mall-admin (hệ thống quản trị), mall-portal (cửa hàng cho khách), và mall-search (tìm kiếm dựa trên Elasticsearch), cùng các module dùng chung mall-common, mall-mbg, và mall-security, theo cấu trúc dự án trong README.
mall được phát hành theo giấy phép Apache License 2.0, như được ghi trên repository.
README của mall dẫn link tới một trang hướng dẫn học đầy đủ và một trang video riêng, cả hai đều được tác giả dự án duy trì tại macrozheng.com.
Vấn đề mà mall giải quyết
Những nhà phát triển Java muốn thấy các bài toán thương mại điện tử như tìm kiếm sản phẩm, luồng xử lý đơn hàng và khuyến mãi cho hội viên được ráp thật vào một codebase Spring Boot thường phải tự ghép từ nhiều hướng dẫn rời rạc về MyBatis, Elasticsearch và RabbitMQ. README của mall đóng khung dự án quanh đúng khoảng trống đó: một repo duy nhất có cả cửa hàng và hệ thống quản trị, dùng chung một bộ công nghệ Java phổ biến mà một đội thực tế sẽ dùng. Đó chính là khoảng trống mall lấp vào.
Trường hợp sử dụng tốt nhất
- •Tìm hiểu cách một dự án Spring Boot nhiều module được tổ chức thật sự, bằng cách đọc mall-admin, mall-portal, và mall-search như các module riêng dựa trên mall-common và mall-mbg.
- •Dựng một bộ tham khảo chạy local, chạm tới cả MyBatis, Elasticsearch, RabbitMQ, Redis, và MongoDB cùng lúc, thay vì tự ráp từng thứ từ đầu trong một dự án tập demo.
- •So sánh một codebase thương mại điện tử Java dạng module gộp với bản viết lại theo vi dịch vụ, bằng cách đối chiếu mall với mall-swarm của cùng tác giả.
- •Dựng thử một công cụ quản trị nội bộ, mượn cấu trúc quản lý sản phẩm, đơn hàng, hội viên và khuyến mãi của module mall-admin làm điểm khởi đầu.
Ai nên dùng — và ai nên bỏ qua
Hãy thử mall nếu bạn là nhà phát triển Java muốn có một ví dụ đầy đủ, chạy được thật, về codebase thương mại điện tử dùng Spring Boot và MyBatis để đọc, chạy thử hoặc fork, nhất là một dự án ráp sẵn cửa hàng, hệ thống quản trị, tìm kiếm bằng Elasticsearch và message queue RabbitMQ trong cùng một chỗ. Bỏ qua nếu bạn cần một cửa hàng trực tuyến sẵn sàng production và được bảo trì liên tục, hoặc nếu việc đọc tài liệu ưu tiên tiếng Trung và kênh cộng đồng qua WeChat là điều đội bạn không chấp nhận được.
Repo liên quan
Vẫn đang phân vân về mall?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về mall.
