개발Story
Published 2022. 3. 25. 09:56
[XML - db pool 유지] Spring/xml

spring을 사용하다보면 db pool이 끊키는 현상이 발생하고 한다.

 

그럴땐 context-datasource.xml에 db pool을 만들어주는 자리에 option을 주면 해결이 가능하다.

 

[첫번째 방법은 db pool size를 늘리는 것이다.]

<!-- postgresql -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${Globals.DriverClassName}"/>
		<property name="url" value="${Globals.Url}" />
		<property name="username" value="${Globals.UserName}"/>
		<property name="password" value="${Globals.Password}"/>
		
		
		<!-- 운영환경에서 동시접속이 많은경우 connection wait 발생 -->
		<!-- 운영에만 적용 : 개발에서 100개씩 생성하면 pool 이 넘친다. -->
		<property name="initialSize" value="100"/>
		<property name="maxActive" value="1000"/>
		<property name="maxIdle" value="100"/>
		<property name="minIdle" value="100"/>
		<property name="maxWait" value="2000"/>
	<bean>

bean을 생성하는 자리에 initialSize, maxActive, maxIdle, minIdle, maxWait 설정을 주면 된다.

 

설명 : 

<!-- 운영환경에서 동시접속이 많은경우 connection wait 발생 -->
<!-- 운영에만 적용 : 개발에서 100개씩 생성하면 pool 이 넘친다. -->

 

 

[두번쨰 방법은 db에 의미없는 sql을 주기적으로 실행시켜 주는 것이다.]

	<!-- postgresql -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${Globals.DriverClassName}"/>
		<property name="url" value="${Globals.Url}" />
		<property name="username" value="${Globals.UserName}"/>
		<property name="password" value="${Globals.Password}"/>
	 
		<!-- 1분 -->
		<property name="validationQuery" value="select 1" />	
		<property name="testWhileIdle" value="true" />
		<property name="timeBetweenEvictionRunsMillis" value="60000" />  

	</bean>

validationQuery, testWhileIdle, timeBetweenEvictionRunsMillis 옵션이다.

 

1분에 한번씩 select 1 query를 실행시켜주는것이다.

 

oracle일경우 select 1 from dual을 실행시켜주어도 된다.

profile

개발Story

@슬래기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!