2015-10-02 30 views
5

Tôi muốn triển khai kiến ​​trúc plugin trong ứng dụng Khởi động mùa xuân. Hãy để tôi giải thích kịch bản của tôi. Tôi có một ứng dụng chính, khởi động máy chủ, quản lý bảo mật, vv Ứng dụng giống như gốc của sản phẩm cuối cùng của tôi, bao gồm ứng dụng gốc này và các plugin khác được thêm vào nó.Triển khai kiến ​​trúc plugin trong chú thích dựa trên ứng dụng Spring Boot

Giờ đây, các plugin là ứng dụng Khởi động Spring, mà tôi có thể thêm vào ứng dụng gốc bằng cách tìm kiếm động các jars trong đường dẫn cụ thể hoặc bằng cách thêm chúng vào dự án phụ thuộc như thư viện.

Plugin có cấu hình riêng và giống như các ứng dụng chạy bên trong ứng dụng gốc chính. Giả sử nếu ứng dụng gốc chạy máy chủ, ứng dụng plugin có thể có tất cả các bộ điều khiển (điểm cuối), đậu vv cung cấp chức năng cho sản phẩm của tôi.

Đây là tiền đề, bây giờ những gì tôi muốn biết là,

  1. Làm thế nào tôi có thể đạt được kiến ​​trúc này?
  2. Ứng dụng gốc sẽ kết nối với các plugin như thế nào?
  3. Họ có các bối cảnh ứng dụng riêng biệt không?
  4. Tôi làm cách nào để khởi động và định cấu hình ứng dụng con từ ứng dụng gốc?
  5. Khi ứng dụng nhận được yêu cầu từ khách hàng làm cách nào tôi có thể định tuyến yêu cầu tới bộ điều khiển cụ thể bên trong plugin cụ thể xem xét tôi có thể có nhiều plugin.

Tôi nhầm lẫn về khái niệm ở đây và cách hoạt động của khái niệm. Bất kỳ loại trợ giúp nào đều được đánh giá cao. Nếu có một số ví dụ mà bất kỳ ai cũng có thể cung cấp, điều đó sẽ thật tuyệt vời.

+2

Tôi sẽ triển khai hệ thống plugin tương tự.Bạn đã tìm thấy một giải pháp? – rvit34

Trả lời

5

Giống như mô tả trong Java dyanmically load plugin bạn có các tùy chọn kéo:

  1. Đi cách OSGi, trong đó có tất cả các câu hỏi của bạn vào tài khoản, nhưng có thể là một chút khó khăn để kết hợp với boot mùa xuân
  2. Sử dụng một ServiceLoader

Ít nhất là phương pháp thứ hai, mỗi tệp jar phải triển khai cùng một giao diện, bạn có thể sử dụng để đăng ký nội dung của tệp jar (tương tự như phương pháp bắt đầu của gói OSGi). Theo cách này, bạn có thể tách biệt ngữ cảnh ứng dụng cho mỗi tệp jar và chỉ làm cho nó khả dụng khi khởi động (ví dụ bạn có thể tạo một hệ thống phân cấp ngữ cảnh mà bạn thêm vào đó là ngữ cảnh của jar vào ngữ cảnh gốc).

Điểm cuối cùng của bạn có thể là một điểm khó khăn, vì bạn phải xem xét rằng có thể có nhiều dịch vụ có thể đáp ứng cùng một yêu cầu. Lấy một lá từ OSGi một lần nữa các dịch vụ này thường được định nghĩa thông qua một giao diện chung và các triển khai có thứ gì đó giống như một ưu tiên, cho biết dịch vụ nào sẽ được sử dụng nếu có nhiều hơn một dịch vụ. Tất nhiên có những cách tiếp cận khác mà bạn có thể định nghĩa để chọn một phương pháp khác.

Các vấn đề liên quan