Spring 데이터 소스 구성 방법

데이터 소스 구성
Spring은 제3자 의존 패키지에 두 개의 데이터 원본을 포함하는 실현 클래스 패키지를 포함한다. 하나는 Apache의 DBCP이고 다른 하나는 C3P0이다.Spring 구성 파일에서 둘 중 하나의 구성 데이터 소스를 사용할 수 있습니다.
DBCP 데이터 소스
DBCP 클래스 패키지는/lib/jakarta-commons/commons-dbcp에 있습니다.jar, DBCP는 Jakarta commons-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>   
BasicDataSource는 close() 방법으로 데이터 원본을 닫기 때문에 스프링 용기가 닫힐 때 데이터 원본이 정상적으로 닫힐 수 있도록 destroy-method="close"속성을 설정해야 합니다.위에 나열된 필수 데이터 소스 속성 외에 일반적인 속성도 있습니다.
default AutoCommit: 데이터 원본에서 되돌아오는 연결이 자동 제출 메커니즘을 사용하는지 설정합니다. 기본값은true입니다.
defaultReadOnly: 데이터 원본이 읽기 전용만 할 수 있는지 설정합니다. 기본값은false입니다.
maxActive: 최대 연결 데이터베이스 연결 수, 0으로 설정하면 제한이 없음을 나타낸다.
maxIdle: 최대 대기 연결의 수량을 0으로 설정하면 제한이 없음을 표시합니다.
maxWait: 최대 대기 초수, 단위는 밀리초이며, 시간을 초과하면 오류 메시지가 표시됩니다.
validationQuery: 연결이 성공했는지 확인하는 데 사용되는 쿼리 SQL 문장은 최소한 한 줄의 데이터를 되돌려야 합니다. 예를 들어 "select count (*) from user"로 간단하게 설정할 수 있습니다.
removeAbandoned: 스스로 끊을지 여부입니다. 기본값은false입니다.
removeAbandonedTimeout: 몇 초 후 데이터 연결이 자동으로 끊깁니다.removeAbandoned가true로 이 값을 제공합니다.
logabandoned: 중단 이벤트를 기록할지 여부입니다. 기본값은false입니다.
C3P0 데이터 소스
C3P0은 오픈 소스 코드의 JDBC 데이터 소스 구현 프로젝트로lib 디렉터리에서hibernate와 함께 발표되며 JDBC3과 JDBC2의 확장 규범 설명을 실현한Connection과 Statement 풀을 실현한다.C3P0 클래스 패키지는/lib/c3p0/c3p0-0.9.0.4에 있습니다.jar.다음은 C3P0을 사용하여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>  

ComboPooled DataSource는 Basic DataSource와 같이 데이터 원본을 닫는 데 사용되는close () 방법을 제공합니다. 이로써 Spring 용기가 닫힐 때 데이터 원본이 성공적으로 방출될 수 있습니다.
C3P0은 DBCP보다 풍부한 구성 속성을 가지고 있으며, 이러한 속성을 통해 데이터 소스를 효과적으로 제어할 수 있습니다.
acquireIncrement: 연결 탱크의 연결이 다 사용되면 C3P0에서 새로운 연결을 한꺼번에 만들 수 있습니다.
acquireRetryAttempts: 데이터베이스에서 새 연결을 가져오는 데 실패한 후 반복적으로 가져오는 횟수를 정의합니다. 기본값은 30입니다.
acquire Retry Delay: 두 번의 연결 간격은 밀리초이고 기본값은 1000입니다.
autoCommitOnclose: 연결이 종료되면 기본적으로 커밋되지 않은 모든 작업이 롤백됩니다.기본값은 false입니다.
automaticTestTable: C3P0은 Test라는 빈 테이블을 만들고 자체 검색어를 사용하여 테스트를 진행합니다.이 매개변수를 정의하면 속성 preferredTestQuery가 무시됩니다.이 Test표에서 어떤 조작도 할 수 없습니다. 이것은 C3P0 테스트에 사용되며 기본값은null입니다.
breakAfterAcquireFailure: 연결을 가져오는 데 실패하면 연결을 가져오기를 기다리는 모든 스레드에 이상이 발생합니다.그러나 데이터 원본은 여전히 유효하며, 다음에 getConnection () 을 호출할 때 연결을 계속 시도합니다.true로 설정하면 연결을 가져오는 데 실패한 후 데이터 원본이 끊겼음을 표시하고 영구적으로 닫힙니다.기본값은 false입니다.
checkoutTimeout: 연결 탱크가 다 사용되었을 때 클라이언트가 getConnection () 을 호출한 후 새 연결을 가져올 시간을 기다립니다. 시간이 초과되면 SQLException을 던집니다. 0으로 설정하면 무기한 기다립니다.단위: 밀리초, 기본값은 0;
connectionTesterClassName: ConnectionTester나QueryConnectionTester의 클래스를 실현하여 연결을 테스트합니다. 클래스 이름은 제한된 이름으로 설정해야 합니다.기본값은 com입니다.mchange.v2.C3P0.impl.DefaultConnectionTester;
idleConnectionTestPeriod: 모든 연결 탱크의 빈 연결을 몇 초 간격으로 검사합니까? 기본값은 0입니다. 검사하지 않음을 표시합니다.
initialPoolSize: 초기화할 때 생성된 연결 수는 minPoolSize와 maxPoolSize 사이에서 값을 받아야 합니다.기본값은 3입니다.
maxIdleTime: 최대 유휴 시간입니다. 유휴 시간을 초과한 연결은 버려집니다.0이나 음수는 영원히 버리지 않는다.기본값은 0입니다.
maxPoolSize: 연결 풀에 남아 있는 최대 연결 수입니다.기본값은 15입니다.
maxStatements: JDBC의 표준 매개 변수로 데이터 원본에 불러오는 PreparedStatement의 수량을 제어합니다.그러나 사전 캐시된 Statement는 전체 연결 풀보다 단일 Connection에 속하기 때문입니다.따라서 이 파라미터를 설정하려면 여러 가지 요소를 고려해야 한다. 만약에 maxStatements와 maxStatementsPerConnection이 모두 0이면 캐시가 닫힌다.기본값은 0입니다.
maxStatementsPerConnection: 연결 탱크 내의 단일 연결이 가지고 있는 최대 캐시 Statement수입니다.기본값은 0입니다.
numHelperThreads: C3P0은 비동기적인 작업입니다. 느린 JDBC 작업은 도움말 프로세스를 통해 이루어집니다.이러한 조작을 확장하면 성능을 효과적으로 향상시킬 수 있으며 여러 라인을 통해 여러 조작이 동시에 실행될 수 있다.기본값은 3입니다.
preferredTestQuery: 모든 연결 테스트가 실행되는 테스트 문장을 정의합니다.연결 테스트를 사용하는 상황에서 이 매개 변수는 테스트 속도를 현저하게 높일 수 있다.테스트의 표는 초기 데이터 원본에 존재해야 합니다.기본값은 null입니다.
propertyCycle: 사용자가 시스템 구성 매개변수를 수정하기 전에 최대 대기 시간입니다.기본값은 300입니다.
TestConnectionOnCheckout: 성능 소모가 많기 때문에 필요할 때만 사용하십시오.true로 설정하면 모든 연결이 제출될 때 유효성을 검사합니다.idleConnectionTestPeriod 또는 automaticTestTable 권장
등 방법으로 연결 테스트의 성능을 향상시킨다.기본값은 false입니다.
TestConnectionOnCheckin: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
알림은 항상 개발자가 ${xx}의 앞뒤에 빈칸을 입력하는데, 이 빈칸 문자는 변수와 합쳐서 속성의 값으로 사용됩니다.예를 들어: 의 속성 설정 항목은 앞뒤에 빈칸이 있고 해석된 후username의 값은'1234'이므로 최종 오류가 발생할 수 있으므로 각별히 조심해야 합니다.
JNDI 데이터 소스 가져오기
만약 응용 프로그램이 고성능 응용 서버(예를 들어 WebLogic나 Websphere 등)에 설정된다면, 우리는 응용 서버 자체가 제공하는 데이터 원본을 사용하기를 희망할 수 있습니다.응용 서버의 데이터 원본은 JNDI 오픈 호출자가 사용하고, Spring은 이를 위해 JNDI 자원을 인용하는 JndiObjectFactoryBean 클래스를 제공합니다.간단한 구성은 다음과 같습니다.
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 자원을 얻기 위해 제이 이름 공간을 제공한다. 제이 이름 공간을 통해 J2EE 자원의 인용을 효과적으로 간소화할 수 있다.다음은 jee 네임스페이스를 사용하여 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 자체도 간단한 데이터 소스 구현 클래스인 드라이브 관리자 DataSource를 제공합니다. 이것은 org에 있습니다.springframework.jdbc.데이터소스 패키지에 있습니다.이 종류는javax를 실현했다.sql.DataSource 인터페이스는 풀로 연결된 메커니즘을 제공하지 않습니다. getConnection () 을 호출해서 새 연결을 가져올 때마다 간단하게 새 연결을 만듭니다.따라서 이 데이터 원본 클래스는 단원 테스트나 간단한 독립 응용에서 사용하기에 비교적 적합하다. 왜냐하면 추가 의존 클래스가 필요하지 않기 때문이다.
다음은 DriverManager DataSource의 간단한 사용을 살펴보겠습니다. 물론 저희가 설정하는 방식으로 DriverManager DataSource를 직접 사용할 수도 있습니다.
java 코드
 
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은 두 개의 데이터 원본을 포함하는 구현 클래스 패키지를 포함하고 있으며, 스스로 선택하여 정의할 수 있습니다.실제 배치할 때, 우리는 응용 서버 자체가 제공하는 데이터 원본을 직접 사용할 수 있습니다. 이 때, JndiObjectFactoryBean이나 Jee 명칭 공간을 통해 JNDI의 데이터 원본을 인용할 수 있습니다.

좋은 웹페이지 즐겨찾기