2017-10-18 13 views
0

내가 Grails의 3.3.0 및 사용 스프링 부팅 + Grails 애플리케이션 구축하고 봄을 부팅 1.5.6.RELEASE빌드 컨텍스트 (소비자 클라이언트) 특정 봄 응용 프로그램

나는 컨트롤러 소비자 클라이언트 응용 프로그램에 JSON 데이터를 제공하는이 .

ExampleController.groovy

class ExampleCotnroller { 

    def endpointServerJosn(){ 
    } 
} 

가 최근에 하나 이상의 소비자를 도입하고는 유사한 JSON 데이터를 기대하지만, 다른 소스로부터 하였다.

그래서 나는 = 사실 내 application.yml에 another.client을 플래그를 추가로 내 컨트롤러를 수정 :

업데이트 ExampleController.groovy

class ExampleCotnroller { 

    def endpointServerJosn(){ 
     if(another.client){ 
      //server data from this client's source 
     }else{ 
      //server data from other client's source 
     } 
    } 
} 

그러나 나는 더 많은 설정 기대하고있다 내 솔루션을 디자인별로 확장 할 수 없으므로 내 컨트롤러를 망칠 것입니다. 여기서 각 클라이언트는 자신의 슬레이브 API 컨트롤러를 사용하여 데이터를 가져옵니다. > 마스터 (내 컨트롤러)을 차단 클라이언트와 관련된 하나 광석 이상의 슬레이브 API를 호출, 데이터를 가져 와서 그것을 를 집계하고 데이터를 다시

이 simiallarly, 클라이언트 2는 요청을 보냅니다 전송 -

클라이언트 (1)는 요청을 전송 -> 마스터 (내 컨트롤러) 차단은 호출 한 클라이언트에 관련된 이상의 슬레이브 API를 내가 같은 추상 컨트롤러있는의 생각이

:

class AbstractApplicationController{ 

     def endpointServerJson(); 
} 

class FirstCilentController extends AbstractApplicationController { 
} 

class SecondClientController extends AbstractApplicationController { 
} 

위의 디자인으로 확장 가능한 솔루션을 얻을 수 있습니까? 응용 프로그램에서 구성을 기반으로 선호하는 컨트롤러를 외부 yml 또는 application.yml 파일에서 선택할 수 있습니까?

답변

0

제 의견으로는 Multitenancy의 문제를 설명하고 있습니다. 위키 피 디아에서 :

용어 "소프트웨어 다중 테넌트" 소프트웨어 서버에서 실행되고 단일 인스턴스가 여러 [...] 사용자를 제공하는 소프트웨어 아키텍처를 의미 공유 소프트웨어 인스턴스에 대한 특정 권한을 가진 공통 액세스

출처 : https://en.wikipedia.org/wiki/Multitenancy

나는 더 이상 코드를 구현하기 전에 길이 다중 테넌트의 개념을 연구 시작하는 당신을 조언한다.이 밖에 자원을 많이하지만이 링크는 좋은 소개 :

https://fizzylogic.nl/2016/01/24/make-your-spring-boot-application-multi-tenant-aware-in-2-steps/

마지막으로, 실제로 당신이 무서운 시간 제약을 받고있다합니다. 클라이언트 식별자를 데이터 인수로 사용하고 클라이언트 식별자를 인수로 사용하는 클라이언트가 아닌 데이터 액세스 계층 또는 컨트롤러 아래에 서비스 집합을 만들어야하는 것처럼 보입니다. 예 :

class ExampleCotnroller { 

    def endpointServerJosn() { 
     return clientDataService.getData(clientID); 
    } 

}