Spring 에서 데이터 원본 을 설정 하 는 세 가지 방식

13137 단어 springdateasource
Spring 에서 데이터 원본 을 설정 하 는 세 가지 방식
1,org.springframework.jdbc.datasource.DriverManager DataSource 사용
설명:DriverManager DataSource 가 연결 을 만 드 는 것 은 연결 만 있 으 면 connection 을 새로 만 드 는 것 으로 연결 풀 의 역할 이 전혀 없습니다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName">
        <value>${jdbc.driverClassName}</value>
    </property> 
    <property name="url">
        <value>${jdbc.url}</value>
    </property> 
    <property name="username">
        <value>${jdbc.username}</value>
    </property> 
    <property name="password">
        <value>${jdbc.password}</value>
    </property> 
</bean> 

2.org.apache.comons.dbcp.BasicDataSource 사용
설명:이것 은 추천 설명 하 는 데이터 소스 설정 방식 으로 연결 탱크 기술 을 진정 으로 사용 했다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName">
		<value>oracle.jdbc.driver.OracleDriver</value>
	</property>
	<property name="url">
		<value>jdbc:oracle:thin:@localhost:1521:orcl</value>
	</property>
	<property name="username">
		<value>test</value>
	</property>
	<property name="password">
		<value>test</value>
	</property>
	<property name="maxActive">
		<value>255</value>
	</property>
	<property name="maxIdle">
		<value>2</value>
	</property>
	<property name="maxWait">
		<value>120000</value>
	</property>
</bean> 

3.org.springframework.jndi.JndiObjectFactory Bean 사용 하기
설명:JndiObject Factory Bean 은 JNDI 를 통 해 DataSource 를 얻 을 수 있 습 니 다.
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName">
		<value>java:comp/env/jdbc/roseindiaDB_local</value>
	</property>
</bean> 

요약:3 가지 방식 중 첫 번 째 는 연결 탱크 를 사용 하지 않 았 기 때문에 프로젝트 에 사용 하지 않 습 니 다.세 번 째 방식 은 웹 server 에서 데이터 원본 을 설정 해 야 합 니 다.배치 하기에 불편 합 니 다.저 는 두 가지 방식 으로 데이터 원본 을 설정 하 는 것 을 추천 합 니 다.
데이터 원본 설정
    Spring 은 제3자 의존 패키지 에 두 개의 데이터 원본 을 포함 하 는데 하 나 는 Apache 의 DBCP 이 고 다른 하 나 는 C3P 0 이다.Spring 설정 파일 에서 이 두 가지 설정 데이터 원본 을 사용 할 수 있 습 니 다.
DBCP 데이터 원본
    DBCP 패 키 지 는/lib/jakarta-comons/comons-dbcp.jar,DBCP 는 자카르타 comons-pool 대상 풀 메커니즘 에 의존 하 는 데이터베이스 연결 풀 이기 때문에 클래스 경로 에/lib/jakarta- commons/commons-pool.jar。다음은 DBCP 로 MySql 데이터 원본 을 설정 하 는 설정 세 션 입 니 다.
xml 코드
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
	destroy-method="close">
	<property name="driverClassName" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql://localhost:3309/sampledb" />
	<property name="username" value="root" />
	<property name="password" value="1234" />
</bean>  

Basic DataSource 는 close()방법 으로 데이터 원본 을 닫 기 때문에 destroy-method="close"속성 을 설정 하여 Spring 용기 가 닫 혔 을 때 데이터 원본 이 정상적으로 닫 힐 수 있 도록 해 야 합 니 다.상기 필수 데이터 원본 속성 을 제외 하고 자주 사용 하 는 속성 도 있 습 니 다.
    default AutoCommit:데이터 원본 에서 돌아 오 는 연결 이 자동 제출 체 제 를 사용 하 는 지 설정 합 니 다.기본 값 은 true 입 니 다.
    defaultReadOnly:데이터 원본 이 읽 기 전용 작업 만 수행 할 수 있 는 지 설정 합 니 다.기본 값 은 false 입 니 다.
    max Active:최대 연결 데이터베이스 연결 수 를 0 으로 설정 하면 제한 이 없 음 을 표시 합 니 다.
    maxIdle:최대 연결 대기 수량 을 0 으로 설정 하면 제한 이 없 음 을 표시 합 니 다.
    maxWait:최대 대기 초 수,단 위 는 밀리초 이 며 시간 을 초과 하면 오류 가 발생 합 니 다.
    vaidationQuery:연결 이 성 공 했 는 지 확인 하 는 데 사용 되 는 SQL 문 구 는 최소한 한 줄 의 데 이 터 를 되 돌려 야 합 니 다.예 를 들 어"select count(*)from user"로 간단하게 설정 할 수 있 습 니 다.
    removeAbandoned:자기 중단 여 부 는 기본적으로 false 입 니 다.
    removeAbandoned Timeout:몇 초 후에 데이터 연결 이 자동 으로 끊 어 집 니 다.removeAbandoned 에서 true 로 이 값 을 제공 합 니 다.
    logAbandoned:인 터 럽 트 이 벤트 를 기록 할 지 여부 입 니 다.기본 값 은 false 입 니 다.
C3P 0 데이터 원본
    C3P 0 은 오픈 소스 코드 의 JDBC 데이터 원본 구현 프로젝트 로 lib 디 렉 터 리 에서 Hibernate 와 함께 발표 되 어 JDBC 3 와 JDBC 2 확장 규범 설명 을 실현 하 는 Connection 과 Statement 풀 을 실현 합 니 다.C3P0 클래스 패 키 지 는/lib/c3p0/c3p0-0.9.0.4.jar。다음은 C3P 0 을 사용 하여 Oracle 데이터 원본 을 설정 합 니 다.
xml 코드
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
	destroy-method="close">
	<property name="driverClass" value=" oracle.jdbc.driver.OracleDriver " />
	<property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i " />
	<property name="user" value="admin" />
	<property name="password" value="1234" />
</bean>

ComboPooledDataSource 는 Basic DataSource 와 마찬가지 로 데이터 원본 을 닫 는 close()방법 을 제공 하여 Spring 용기 가 닫 혔 을 때 데이터 원본 이 성공 적 으로 방출 될 수 있 도록 보장 합 니 다.
    C3P 0 은 DBCP 보다 더 풍부 한 설정 속성 을 가지 고 있 습 니 다.이러한 속성 을 통 해 데이터 원본 을 효과적으로 제어 할 수 있 습 니 다.
    acquire Increment:연결 탱크 의 연결 이 다 되 었 을 때 C3P 0 은 한꺼번에 새로운 연결 의 수 를 만 듭 니 다.
    acquireRetryAttempts:데이터베이스 에서 새 연결 을 가 져 오 는 데 실패 한 후 반복 적 으로 가 져 오 는 횟수 를 정의 합 니 다.기본 값 은 30 입 니 다.
    acquireRetryDelay:두 번 의 연결 중간 간격,단위 밀리초,기본 값 은 1000 입 니 다.
    autoCommitOnClose:연결 이 닫 혔 을 때 제출 하지 않 은 모든 작업 을 스크롤 백 합 니 다.기본 값 은 false;
    automatic TestTable:C3P 0 은 Test 라 는 빈 표를 만 들 고 자체 검색 어 를 사용 하여 테스트 합 니 다.이 매개 변 수 를 정의 하면 속성 preferred TestQuery 는 무 시 됩 니 다.이 Test 표 에서 어떠한 조작 도 할 수 없습니다.C3P 0 테스트 에 사 용 될 것 입 니 다.기본 값 은 null 입 니 다.
    breakAfterAcquireFailure:연결 을 가 져 오 는 데 실패 하면 연결 을 가 져 오 기 를 기다 리 는 모든 스 레 드 에 이상 이 발생 합 니 다.그러나 데이터 원본 은 유효 하 게 보존 되 어 있 으 며 다음 에 조정 합 니 다.   getConnection()을 사용 할 때 연결 을 계속 시도 합 니 다.트 루 로 설정 하면 연결 을 가 져 오 는 데 실 패 했 을 때 이 데이터 원본 은 끊 겼 음 을 밝 히 고 영구적 으로 닫 힙 니 다.기본 값 은 false;
    checkoutTimeout:연결 풀 이 다 떨 어 졌 을 때 클 라 이언 트 가 getConnection()을 호출 한 후에 새로운 연결 을 가 져 오 는 시간 을 기다 리 고 시간 이 초과 되면 SQLException 을 던 집 니 다.0 으로 설정 하면 무기한 대기 합 니 다.단위 밀리초,기본 값 0;
    connectionTesterClassName:connectionTester 나 Query ConnectionTester 를 실현 하 는 클래스 를 통 해 연결 을 테스트 합 니 다.클래스 이름 은 전체 제한 이름 으로 설정 해 야 합 니 다.기본 값 은 com.mchange.v2.2C3P0.impl.DefaultConnectionTester 입 니 다.
    idleConnectionTestPeriod:모든 연결 풀 의 남 은 연결 을 몇 초 간격 으로 검사 합 니까?기본 값 은 0 입 니 다.검사 하지 않 음 을 표시 합 니 다.
    initial PoolSize:초기 화 할 때 만 든 연결 수 는 minPoolSize 와 max PoolSize 사이 에서 값 을 추출 해 야 합 니 다.기본 값 은 3;
    max IdleTime:최대 남 은 시간,남 은 시간 을 초과 한 연결 은 버 려 집 니 다.0 이나 마이너스 라면 영원히 버 리 지 않 는 다.기본 값 0;
    max PoolSize:연결 탱크 에 남아 있 는 최대 연결 수 입 니 다.기본 값 15;
    max Statements:JDBC 의 표준 매개 변 수 는 데이터 원본 에 불 러 오 는 Prepared Statement 수량 을 제어 합 니 다.그러나 캐 시 된 Statement 은 전체 연결 탱크 가 아 닌 하나의 Connection 에 속 하기 때 문 입 니 다.따라서 이 매개 변 수 를 설정 하려 면 여러 가지 요 소 를 고려 해 야 합 니 다.만약 에 max Statements 와 max Statements PerConnection 이 모두 0 이면 캐 시가 닫 힙 니 다.기본 값 0;
    max StatementsPerConnection:연결 탱크 내 단일 연결 에 있 는 최대 캐 시 Statement 수 입 니 다.기본 값 0;
    numHelperThreads:C3P 0 은 비동기 적 으로 작 동 되 며 느 린 JDBC 작업 은 도움말 프로 세 스 를 통 해 이 루어 집 니 다.이 작업 들 을 확장 하면 성능 을 효과적으로 향상 시 킬 수 있 고 다 중 스 레 드 를 통 해 여러 작업 을 동시에 수행 할 수 있 습 니 다.기본 값 은 3;
    preferredTestQuery:모든 연결 테스트 가 실 행 된 테스트 문 구 를 정의 합 니 다.연결 테스트 를 사용 하 는 상황 에서 이 매개 변 수 는 테스트 속 도 를 현저히 높 일 수 있다.테스트 표 는 초기 데이터 원본 에 있어 야 합 니 다.기본 값 은 null 입 니 다.
    property Cycle:사용자 가 시스템 설정 파 라 메 터 를 수정 하기 전에 가장 많이 기다 리 는 초 입 니 다.기본 값 300;
    testconnection OnCheckout:성능 소모 가 많 기 때문에 필요 할 때 만 사용 하 십시오.true 로 설정 하면 모든 connection 이 제출 할 때 유효성 을 검증 합 니 다.idleConnectionTestPeriod 또는 automaticTestTable 사용 권장
등 방법 으로 연결 테스트 의 성능 을 향상 시킨다.기본 값 은 false;
    testconnection OnCheckin:true 로 설정 하면 연결 을 받 는 동시에 연결 의 유효성 을 검사 합 니 다.기본 값 은 false 입 니 다.
프로필 을 읽 는 방식 참조 속성:
<bean id="propertyConfigurer"
	class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="/WEB-INF/jdbc.properties" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
	destroy-method="close">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean> 

    jdbc.properties 속성 파일 에서 속성 값 을 정의 합 니 다:
    jdbc.driverClassName= com.mysql.jdbc.Driver 
    jdbc.url= jdbc:mysql://localhost:3309/sampledb 
    jdbc.username=root 
    jdbc.password=1234 

    항상 개발 자가${xxx}의 앞 뒤 에 빈 칸 을 입력 하 는 것 을 알려 줍 니 다.이 빈 칸 문 자 는 변수 와 합 쳐 속성 값 으로 합 니 다.예 를 들 어의 속성 설정 항목 은 앞 뒤 에 빈 칸 이 있 습 니 다.분 석 된 후 username 의 값 은"1234"입 니 다.이 는 최종 오류 가 발생 할 수 있 으 므 로 특히 조심해 야 합 니 다.
JNDI 데이터 원본 가 져 오기
    고성능 애플 리 케 이 션 서버(예 를 들 어 WebLogic 이나 Websphere 등)에 설정 되 어 있 으 면 서버 자체 가 제공 하 는 데이터 원본 을 사용 하고 싶 을 수 있 습 니 다.애플 리 케 이 션 서버 의 데이터 원본 은 JNDI 오픈 호출 자 를 사용 하 며,Spring 은 이 를 위해 JNDI 자원 을 참조 하 는 JndiObject Factory Bean 클래스 를 제공 합 니 다.다음은 간단 한 설정 입 니 다:
xml 코드
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">      
    <property name="jndiName" value="java:comp/env/jdbc/bbt"/>      
</bean> 

jndiName 을 통 해 인 용 된 JNDI 데이터 원본 이름 을 지정 합 니 다.
    Spring 2.0 은 J2EE 자원 을 얻 기 위해 jee 네 임 스페이스 를 제공 합 니 다.jee 네 임 스페이스 를 통 해 J2EE 자원 의 인용 을 효과적으로 간소화 할 수 있 습 니 다.다음은 JE 네 임 스페이스 를 사용 하여 JNDI 데이터 원본 을 참조 하 는 설정 입 니 다.
xml 코드
<beans xmlns=http://www.springframework.org/schema/beans
	xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:jee=http://www.springframework.org/schema/jee
	xsi:schemaLocation="http://www.springframework.org/schema/beans     
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd     
http://www.springframework.org/schema/jee    
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
	<jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt" />
</beans>

Spring 데이터 원본 구현 클래스
    Spring 자체 도 간단 한 데이터 원본 구현 클래스 DriverManager DataSource 를 제공 합 니 다.org.spring from work.jdbc.datasource 패키지 에 있 습 니 다.이 종 류 는 javax.sql.dataSource 인 터 페 이 스 를 실 현 했 지만 풀 화 된 연결 체 제 를 제공 하지 않 았 습 니 다.getConnection()을 호출 하여 새로운 연결 을 가 져 올 때마다 간단하게 새로운 연결 을 만 들 었 습 니 다.따라서 이 데이터 소스 류 는 유닛 테스트 나 간단 한 독립 응용 에서 사용 하기에 적합 하 다.추가 의존 류 가 필요 하지 않 기 때문이다.
     다음은 DriverManager DataSource 의 간단 한 사용 을 살 펴 보 겠 습 니 다.물론 저 희 는 설정 을 통 해 DriverManager DataSource 를 직접 사용 할 수 있 습 니 다.
자바 코드

DriverManagerDataSource ds = new DriverManagerDataSource ();      
ds.setDriverClassName("com.mysql.jdbc.Driver");      
ds.setUrl("jdbc:mysql://localhost:3309/sampledb");      
ds.setUsername("root");      
ds.setPassword("1234");      
Connection actualCon = ds.getConnection();  

작은 매듭
    어떤 지구 화 기술 을 사용 하 든 데이터 원본 을 정의 해 야 한다.Spring 은 두 개의 데이터 소스 의 실현 패 키 지 를 추가 하여 스스로 선택 하여 정의 할 수 있 습 니 다.실제 배치 할 때 저 희 는 응용 서버 자체 가 제공 하 는 데이터 원본 을 직접 사용 할 수 있 습 니 다.이 때 JndiObject Factory Bean 이나 jee 네 임 스페이스 를 통 해 JNDI 의 데이터 원본 을 참조 할 수 있 습 니 다.
DBCP 와 C3PO 설정 의 차이 점:
C3PO :DBCP:
xml 코드
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
    <property name="driverClass">  
        <value>oracle.jdbc.driver.OracleDriver</value>  
    </property>  
    <property name="jdbcUrl">             
        <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseName</value>  
     </property>  
    <property name="user">  
        <value>testAdmin</value>  
    </property>  
    <property name="password">  
        <value>123456</value>  
    </property>  
</bean>  

좋은 웹페이지 즐겨찾기