2013-08-16 2 views
1

JDBC 연결에 대한 기본 설정이있는 구성 파일이 있습니다.Spring JdbcTemplate DataSource를 동적으로 변경하는 방법은 무엇입니까?

응용 프로그램이 실행되면이 기본 연결 세부 정보를 편집 할 수있는 옵션이 있습니까? 모든 bean이 작성된 후 (제어기에서 연결 세부 사항 편집).

시나리오 :

  • 사용자가 응용 프로그램을 시작하고, 로컬 호스트로 이동하여 연결 세부 사항을 편집 할 수 있습니다 : 8080/MyApp를/DB/편집
  • 연결 세부 사항을 채우고 저장
  • 새 데이터베이스 정보

그러면 기존 연결을 찾고 연결 세부 정보를 업데이트하고 빈을 다시 인스턴스화해야합니다.

+0

이 경우 "사용자"는 일종의 관리 사용자이거나 모든 사용자가 자신의 계정에 '환경 설정'과 같은 다른 데이터 소스를 설정할 수 있습니까? – samuelgrigolato

+0

모든/모든 사용자 - 사용자 :-) –

+1

사용자 수가 너무 적 으면 사용자 지정 데이터 원본 공급자 메커니즘을 사용하여 설정 데이터베이스에서 연결 속성을 사용자 단위로 조회하고 모든 요청에 ​​대한 연결을 제공하고 사용자가 정보를 업데이트 할 때 '캐시 된'값을 재설정하는 API를 제공합니다. 그렇지 않으면 많은 동시 사용자가있을 경우 모든 요청 (내 제안)에서 연결을 열거 나 닫을 때 성능이 전혀 좋지 않을 수 있으므로 훨씬 더주의해야합니다. – samuelgrigolato

답변

0

Spring Container에서 빈을 제거하고 다시 시작할 수 있습니다.

Demo demo = getBean(context); 

    ConfigurableListableBeanFactory configurableListableBeanFactory = context 
      .getBeanFactory(); 

    BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) configurableListableBeanFactory; 
    // Removing the bean from container 
    beanDefinitionRegistry.removeBeanDefinition("demo"); 

    // Trying to obtains bean again from container. This will throw a null  
    demo = getBean(context); 
    //demo object will be null here 

    // Creating and registering bean to the container  
    BeanDefinition beanDefinition = new RootBeanDefinition(Demo.class); 
    beanDefinition.setAttribute("name", "name"); 

    beanDefinitionRegistry.registerBeanDefinition("demo", beanDefinition); 
    context.refresh(); 

    //Obtaining from container again 
    demo = getBean(context); 
관련 문제