programing

주석 기반 Spring Boot Application에서 플러그인 아키텍처 구현

stoneblock 2023. 8. 27. 08:50

주석 기반 Spring Boot Application에서 플러그인 아키텍처 구현

스프링 부트 애플리케이션에서 플러그인 아키텍처를 구현하고 싶습니다.제 시나리오를 설명하겠습니다.저는 서버를 시작하고 보안을 관리하는 메인 애플리케이션을 가지고 있습니다.앱은 이 루트 앱과 추가된 다른 플러그인을 포함하는 최종 제품의 루트와 같습니다.

이제 플러그인은 Spring Boot 응용 프로그램 자체이며, 특정 경로에서 동적으로 jars를 검색하거나 프로젝트 종속성에 라이브러리로 추가하여 루트 앱에 추가할 수 있습니다.

플러그인은 자체 구성을 가지고 있으며 메인 루트 앱 내에서 실행되는 앱과 같습니다.루트 앱이 서버를 실행하는 경우 플러그인 앱에 내 제품에 기능을 제공하는 모든 컨트롤러(엔드포인트), 콩 등이 있을 수 있다고 가정해 보겠습니다.

이것이 전제입니다. 이제 제가 알고 싶은 것은,

  1. 어떻게 하면 이 아키텍처를 달성할 수 있습니까?
  2. 루트 앱은 플러그인과 어떻게 통신합니까?
  3. 별도의 애플리케이션 컨텍스트가 있습니까?
  4. 루트 앱에서 하위 앱을 부팅하고 구성하려면 어떻게 해야 합니까?
  5. 응용 프로그램이 클라이언트로부터 요청을 수신할 때 플러그인이 많을 수 있다는 점을 고려하여 특정 플러그인 내부의 특정 컨트롤러로 요청을 라우팅하려면 어떻게 해야 합니까?

저는 여기서의 개념과 그것이 어떻게 작동할 수 있는지 혼란스럽습니다.어떤 도움이든 감사합니다.만약 누구나 제공할 수 있는 예가 있다면, 그것은 정말 멋질 것입니다.

이 게시물은 3년 전입니다.하지만 비슷한 시나리오에 대한 해결책을 찾는 분을 위해 답변을 드리고 싶습니다.당신에게 적합한 플러그인 프레임워크인 pf4j인 것 같습니다.네이티브 앱을 지원하는 것 외에도 spring-pf4j도 있어 봄까지 사용할 수 있습니다.

URL: https://pf4j.org

Java 동적 로드 플러그인에 설명된 것처럼 토우 옵션이 있습니다.

  1. 모든 질문을 고려한 OSGi 방식으로 진행되지만 Spring boot과 결합하는 것은 다소 까다로울 수 있습니다.
  2. 서비스 로더 사용

적어도 두 번째 접근 방식의 경우, 각 jar 파일은 동일한 인터페이스를 구현해야 하며, 이 인터페이스를 사용하여 jar 파일의 내용을 등록할 수 있습니다(OSGi 번들의 시작 방법과 유사함).이러한 방식으로 각 jar 파일에 대한 응용 프로그램 컨텍스트를 분리하고 시작 시에만 사용할 수 있습니다(예를 들어 루트 컨텍스트에 jar의 컨텍스트를 추가하는 컨텍스트 계층을 만들 수 있습니다).

동일한 요청을 충족할 수 있는 서비스가 여러 개 있을 수 있다는 점을 고려해야 하므로 마지막 요점은 까다로운 것일 수 있습니다.OSGi에서 벗어나 이러한 서비스는 일반적으로 공통 인터페이스를 통해 정의되며, 구현에는 우선 순위와 같은 것이 있습니다. 이는 둘 이상의 서비스가 있을 경우 어떤 서비스를 사용해야 하는지를 나타냅니다.물론 하나 또는 다른 하나를 선택하기 위해 정의할 수 있는 다른 접근 방식도 있습니다.

두 가지 옵션이 있습니다.

  1. 스프링 플러그인을 사용하면 OSGi와 같은 기능을 달성할 수 있습니다.https://github.com/spring-projects/spring-plugin
  2. 스프링 부트 백엔드와 마이크로 서버 프론트엔드를 사용하는 마이크로 부트를 사용합니다.또한 요구 사항에 따라 플러그인 지원을 제공합니다.https://github.com/aol/micro-server/tree/master/micro-boot 를 탐색할 수 있습니다.

언급URL : https://stackoverflow.com/questions/32901188/implementing-plugin-architecture-in-annotation-based-spring-boot-application