Spring 과 DBCP 를 이용 하여 분포 식 동적 데이터베이스 연결 탱크 관 리 를 실현 하 다

eagleking 012 의 CSDN 칼럼
두 걸음 만:
1. MultiDataSourceBuilder 를 정의 하여 applicationContextAware 를 실현 하고 그 안에서 SpringBean 을 정적 으로 가 져 오 는 방법 을 정의 합 니 다.
2. Spring Bean 설정 을 설정 하여 Spring 이 MultiDataSource Builder 와 Basic DataSource 를 관리 하도록 합 니 다.
구체 적 으로 다음 코드 파일 을 보십시오.
public class MultiDataSourceBuilder implements ApplicationContextAware{
	private static final Log log = LogFactory.getLog(MultiDataSourceBuilder.class);
	private static ApplicationContext ac = null;
	public static void setAC(ApplicationContext ctx){
		ac = ctx;
	}
	public static DataSource getSpringBeanDataSource(String beanName){
		while(ac == null){
			try {
				Thread.sleep(1000);
				System.out.println("DataBase is not ready,wait for 1s!");
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
		}
		
		if(beanName.startsWith("java:comp/env/jdbc/orcl")){
			beanName = beanName.substring(beanName.lastIndexOf("orcl"));
			return (DataSource)ac.getBean(beanName);
		}else if(beanName.startsWith("orcl")){
			return ((DataSource)ac.getBean(beanName));
		}
	}

	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		ac = applicationContext;	
	}
}

applicationContextAware 인 터 페 이 스 를 실현 하 는 클래스 는 Spring 에서 setapplicationContext 방법 을 자동 으로 호출 하여 applicationContext 속성 을 설정 합 니 다. 코드 설정 을 직접 쓰 지 않 아 도 됩 니 다.
다음은 데이터 원본 설정 빈.
Spring bean 설정 파일 은?
<bean id="MultiDataSourceBuilder" class="com.myself.dataSource.MultiDataSourceBuilder">
</bean>
<bean id="dataSourceAbstract" class="org.apache.commons.dbcp.BasicDataSource" abstract="true"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />    
    <property name="username"><value>username</value></property>   
    <property name="password"><value>password</value></property>   
    <property name="maxActive"><value>150</value></property>   
    <property name="initialSize"><value>1</value></property>   
    <property name="maxWait"><value>60000</value></property>   
    <property name="maxIdle"><value>20</value></property>   
    <property name="minIdle"><value>3</value></property>   
    <property name="removeAbandoned"><value>true</value></property>   
    <property name="removeAbandonedTimeout"><value>180</value></property>
    <property name="validationQuery"><value>select 1 from dual</value></property>
    <property name="connectionProperties"><value>clientEncoding=UTF-8</value></property>   
</bean>
<!--              URL-->
<bean id="orcl201"  destroy-method="close" parent="dataSourceAbstract">        
    <property name="url" value="jdbc:oracle:thin:@192.168.1.201:1521:orcl" />      
</bean>
<bean id="orcl205"  destroy-method="close" parent="dataSourceAbstract">     
    <property name="url" value="jdbc:oracle:thin:@192.168.1.205:1521:orcl" />   
</bean>
<bean id="orcl209" destroy-method="close" parent="dataSourceAbstract">      
    <property name="url" value="jdbc:oracle:thin:@192.168.1.209:1521:orcl" />   
</bean>
<!--              URL-->
</beans>

Spring 은 bean 의 공공 속성 정 의 를 추상 적 인 bean 에서 편리 하 게 추출 할 수 있 습 니 다. 다른 bean 은 부모 클래스 참조 만 설정 하면 됩 니 다.
 
이렇게 하면 프로그램의 어느 곳 에서 든 정적 인 방법 으로 데이터베이스 연결 풀 을 얻 을 수 있다.tomcat 의 JNDI 기반 연결 탱크 관리 보다 훨씬 편리 하고 더 중요 한 것 은 제어 성 이 좋 고 결합 성 이 낮 다 는 것 이다.
전재 출처 를 밝 혀 주 십시오http://write.blog.csdn.net/postedit/6853870

좋은 웹페이지 즐겨찾기