Spring 과 DBCP 를 이용 하여 분포 식 동적 데이터베이스 연결 탱크 관 리 를 실현 하 다
두 걸음 만:
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.