다중 디비를 설정시 dataSource 중에 하나라도 장애가 발생하면
- 작성자 :
- 열*
- 작성일 :
- 2020-12-03 15:20:44
- 조회수 :
- 3,699
- 구분 :
- 운영환경
- 진행상태 :
- 완료
Q
1번 오라클 A
<bean id="ora-dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
2번 오라클 B
<bean id="ms-dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
3번 오라클 C
<bean id="ms-dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
.
.
.
이렇게 다중 디비를 설정시 dataSource 중에 하나라도 장애가 발생하면
[질문]
1. 어플리케이션 전체가 동작을 하지 않는건지요? (예를들면 로그인부터 동작을 하지 않는지요?)
2. 아니면 어플리케이션이 동작하는데 부분적(*)으로 동작을 안하는지요?
*부분적 : 오라클 C가 장애라면 해당 dataSource부분 SQL 실행시만 에러가 발생 하는지요?
현재 제가 구성한 설정에서는 1번에 해당합니다.
3. 전자정부 프레임워크에서 다중 dataSource를 구성할때
장애가 하나 발생해도 어플리케이션이 동작할수 있는 설정이 있는지요?
<bean id="ora-dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
2번 오라클 B
<bean id="ms-dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
3번 오라클 C
<bean id="ms-dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
.
.
.
이렇게 다중 디비를 설정시 dataSource 중에 하나라도 장애가 발생하면
[질문]
1. 어플리케이션 전체가 동작을 하지 않는건지요? (예를들면 로그인부터 동작을 하지 않는지요?)
2. 아니면 어플리케이션이 동작하는데 부분적(*)으로 동작을 안하는지요?
*부분적 : 오라클 C가 장애라면 해당 dataSource부분 SQL 실행시만 에러가 발생 하는지요?
현재 제가 구성한 설정에서는 1번에 해당합니다.
3. 전자정부 프레임워크에서 다중 dataSource를 구성할때
장애가 하나 발생해도 어플리케이션이 동작할수 있는 설정이 있는지요?
A
안녕하세요.
표준프레임워크센터입니다.
기본적으로 SpringFramework의 Bean들의 라이프사이클은 싱글톤입니다.
따라서 애플리케이션이 구동할때 설정한 Bean들이 초기화됩니다.
당연히 DataSource 또한 Bean에 포함되구요.
애플리케이션을 구동하면 설정한 DataSource Bean을 생성하게 되는데 이때 DB 에 연결이 되지않거나 장애가 있다면
해당Bean은 생성되지 못할것입니다.
따라서 이부분을 아래와 같이 lazy-init="true" 옵션을 부여하여 해당 DataSource가 사용될때 생성되도록 시도해보시기 바랍니다.
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" lazy-init="true">
.
.
</bean>
하지만 해당 dataSource가 애플리케이션이 구동하는 시점에 필요로 하는경우 (Spring Security에서 사용하던지등등) Bean 생성에 실패하게 될 것이고, 애플리케이션 구동에 실패할것입니다.
lazy-init 이라는 옵션을 활용해서 한번 시도해보시기 바랍니다.
또다른 방법이라 한다면 동적으로 dbcp를 구성하는 코드를 작성하셔서 dataSource 생성하는 방법이 있을것입니다.
물론 db에 연결하여 dbcp를 생성하는 코드는 직접 작성하셔야 합니다.
감사합니다.
표준프레임워크센터입니다.
기본적으로 SpringFramework의 Bean들의 라이프사이클은 싱글톤입니다.
따라서 애플리케이션이 구동할때 설정한 Bean들이 초기화됩니다.
당연히 DataSource 또한 Bean에 포함되구요.
애플리케이션을 구동하면 설정한 DataSource Bean을 생성하게 되는데 이때 DB 에 연결이 되지않거나 장애가 있다면
해당Bean은 생성되지 못할것입니다.
따라서 이부분을 아래와 같이 lazy-init="true" 옵션을 부여하여 해당 DataSource가 사용될때 생성되도록 시도해보시기 바랍니다.
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" lazy-init="true">
.
.
</bean>
하지만 해당 dataSource가 애플리케이션이 구동하는 시점에 필요로 하는경우 (Spring Security에서 사용하던지등등) Bean 생성에 실패하게 될 것이고, 애플리케이션 구동에 실패할것입니다.
lazy-init 이라는 옵션을 활용해서 한번 시도해보시기 바랍니다.
또다른 방법이라 한다면 동적으로 dbcp를 구성하는 코드를 작성하셔서 dataSource 생성하는 방법이 있을것입니다.
물론 db에 연결하여 dbcp를 생성하는 코드는 직접 작성하셔야 합니다.
감사합니다.