2012-11-26 3 views
3

현재 JMS 분산 색인을 사용하기 위해 3 대의 시스템에서 봄을 통해 최대 절전 모드를 구성하려고합니다. 우리가 소프트웨어를 배포하는 방식 때문에 세 가지 모든 시스템에서 동일한 구성을 사용해야하지만 그 중 하나를 JMS 마스터로 설정하는 방법이 필요합니다.봄 + 최대 절전 모드 동적 구성 검색

현재 다음 빈 선언을 사용하여 봄 통해 구성되고 최대 절전 모드

: 나는 특정 파일 시스템 마스터를 위해 속성 hibernate.search.default.directory_provider을 설정하는 데 필요한 세 가지 시스템 중 하나와에에

<bean class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
id="productSessionFactory"> 
    <property name="dataSource"> 
     <ref local="productDataSource"/> 
    </property> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 
    <property name="entityInterceptor" ref="builderInterceptor"/> 
    <property name="eventListeners"> 
     <map key-type="java.lang.String" value-type="java.lang.Object"> 
      <entry key="save" value-ref="saveEventListener"/> 
     </map> 
    </property> 
</bean> 

을 다른 두 파일 시스템 - 슬레이브로 설정해야합니다.

각 기계마다 플래그를 설정하여 마스터가되어야하는 기계를 식별 할 수 있지만 모든 구성이 XML이어서 매개 변수를 올바르게 설정하는 로직을 추가 할 수 없습니다.

이 매개 변수를 프로그래밍 방식으로 설정하는 동안 나머지 구성 만 남겨 둘 수 있습니까?

감사합니다.

+0

필자는 항상 마스터/슬레이브 구성이 고통이라고 생각했습니다! 마스터의 JGroups 자동 선거의 소리가 마음에 들어요 :) –

답변

0

프로그래밍 방식으로 일반적으로 가능하지만, 스프링에서 어떻게하는지 정확히 모르겠습니다. 속성을 설정 파일에 저장하는 대신 속성을 동적으로 (또는 적어도 부분적으로 동적으로) 빌드하고 AnnotationSessionFactoryBean에 전달해야합니다. 만약 내가 틀렸다고 생각하지 않는다면 스프링 SPI에 당신이 할 수있는 고리가있다. 예를 들어 BeanDefinitionRegistryPostProcessor.

다른 접근법은 을 직접 작성하는 것입니다. org.hibernate.search.store.impl.FSMasterDirectoryProviderorg.hibernate.search.store.impl.FSSlaveDirectoryProvider을 읽고 위에 읽을 수있는 플래그에 따라 종속 또는 마스터로 작동 할 수있는 공급자를 작성하십시오. 기계.