dbcp
- 작성자 :
- 김*수
- 작성일 :
- 2011-03-16 12:12:54
- 조회수 :
- 2,354
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요
DB연결시
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
와 같이 context-datasource.xml에 등록하여 사용하면
mysql상에서 show processlist 명령어를 이용해서 process 연결상태를 확인하면 2 개의 연결 상태를 유지합니다.
그러나 jndi를 이용하기 위해 다음과 같이 설정하면
-----------context-datasource.xml--------
<bean id="dataSource-mysql" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/master</value>
</property>
</bean>
-----------tomcat 의 server.xml ---------
<Resource name="jdbc/master" auth="Container" driverClassName="org.gjt.mm.mysql.Driver" type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/test"
initialSize="10" maxActive="20" maxIdle="-1" maxWait="-1" username="test" password="test"
testOnBorrow="true" validationQuery="SELECT 1"
poolPreparedStatements="true" maxOpenPreparedStatements="10"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
------------------------------------------
와 같이 설정하면 maxOpenPreparedStatements값에 의해서 인지
mysql 연결 갯수가 항상 10~11개 상태를 유지 합니다.
DAO 소스 상에서 DB에 대한 close를 하지 않아서 그런지, 아니면 설정상의 문제인지 궁금합니다.
DB연결시
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
와 같이 context-datasource.xml에 등록하여 사용하면
mysql상에서 show processlist 명령어를 이용해서 process 연결상태를 확인하면 2 개의 연결 상태를 유지합니다.
그러나 jndi를 이용하기 위해 다음과 같이 설정하면
-----------context-datasource.xml--------
<bean id="dataSource-mysql" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/master</value>
</property>
</bean>
-----------tomcat 의 server.xml ---------
<Resource name="jdbc/master" auth="Container" driverClassName="org.gjt.mm.mysql.Driver" type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/test"
initialSize="10" maxActive="20" maxIdle="-1" maxWait="-1" username="test" password="test"
testOnBorrow="true" validationQuery="SELECT 1"
poolPreparedStatements="true" maxOpenPreparedStatements="10"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
------------------------------------------
와 같이 설정하면 maxOpenPreparedStatements값에 의해서 인지
mysql 연결 갯수가 항상 10~11개 상태를 유지 합니다.
DAO 소스 상에서 DB에 대한 close를 하지 않아서 그런지, 아니면 설정상의 문제인지 궁금합니다.
A
안녕하세요.. 김학수님..
둘다.. DB Connection Pool을 지원하기 때문에 별도의 close를 하셔도 실제 connection이 해제되지 않습니다. (Pool의 기본 기능)
다만, 일반적인 JDBC 방식으로 코딩을 하시는 경우 반드시.. close()를 처리해 주셔야 합니다. (그래야 pool에 반환되면... 이 반환이 되지 않으면.. 더 이상.. pool을 사용할 수 있는 상태가 됨.. )
그러나 iBatis와 같은 Data Access가 적용되면.. 자체적으로 close를 처리하도록 되어있습니다.
=> close를 명시적으로 하든.. 자체적으로 수행되던.. 실제 connection은 pool상에서 연결 상태로 관리됨..
DBCP의 경우도 maxActive 등을 추가로 설정할 수 있는데.. 자세한 설정은 다음 가이드를 참조하십시오.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:data_source
그럼.. 즐거운 하루되십시오.
감사합니다.
둘다.. DB Connection Pool을 지원하기 때문에 별도의 close를 하셔도 실제 connection이 해제되지 않습니다. (Pool의 기본 기능)
다만, 일반적인 JDBC 방식으로 코딩을 하시는 경우 반드시.. close()를 처리해 주셔야 합니다. (그래야 pool에 반환되면... 이 반환이 되지 않으면.. 더 이상.. pool을 사용할 수 있는 상태가 됨.. )
그러나 iBatis와 같은 Data Access가 적용되면.. 자체적으로 close를 처리하도록 되어있습니다.
=> close를 명시적으로 하든.. 자체적으로 수행되던.. 실제 connection은 pool상에서 연결 상태로 관리됨..
DBCP의 경우도 maxActive 등을 추가로 설정할 수 있는데.. 자세한 설정은 다음 가이드를 참조하십시오.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:data_source
그럼.. 즐거운 하루되십시오.
감사합니다.