Tomcat ÀÇ DataSource (JDBC Connection Pool) ¼³Á¤
tomcat.apache.org ÀÇ °ø½Ä ¹®¼ Áß ¿¹Á¦ÀÔ´Ï´Ù.
<Context ...>
...
<Resource name="jdbc/EmployeeDB"
auth="Container"
type="javax.sql.DataSource"
username="dbusername"
password="dbpassword"
driverClassName="org.hsql.jdbcDriver"
url="jdbc:HypersonicSQL:database"
maxActive="8"
maxIdle="4"/>
...
</Context>
ÁÖ¿ä Ç׸ñ¿¡ ´ëÇؼ ¼³¸íÇØ º¸°Ú½À´Ï´Ù.
¿ì¼± commons-dbcp ¿¡¼ Á¦°øÇÏ´Â Ç׸ñÀÔ´Ï´Ù. ÀϺδ dbcp ¼Ò½º¿Í ÇÔ²² ¼³¸íÇÕ´Ï´Ù.
- name
Çʼö Ç׸ñÀ¸·Î¼ root java context ÀÎ java:comp/env ¿¡ »ó´ëÀûÀÎ resource À̸§À̸ç jdbc/ ·Î ½ÃÀÛ (¿¹¸¦ µé¾î jdbc/sarc)
- auth
resource manager ¿¡ sign on ÇÏ´Â ÁÖü·Î Container (container-managed ÀÏ °æ¿ì) ȤÀº Application (application-managed ÀÏ °æ¿ì)
- scope
resource °¡ °øÀ¯ µÉ ¼ö ÀÖ´ÂÁö ¿©ºÎ·Î Shareable ȤÀº Unshareable À̸ç, default ´Â Shareable
- initialSize
Ãʱâ connection ¼ö·Î, default ´Â 0 À̸ç, BasicDataSource.java ¿¡¼ private int initialSize = 0; À¸·Î Á¤ÀǵʵÊ
- maxActive
µ¿½Ã »ç¿ë °¡´ÉÇÑ connection ¼ö·Î 0 ÀÏ °æ¿ì ¹«Á¦ÇÑÀ̸ç, default ´Â 8
- minIdle
maxActive ¸¦ ³ÑÀ» ¼ö ¾øÀ¸¹Ç·Î ¶§¿¡ µû¶ó idle connection ÀÌ minIdle º¸´Ù ÀûÀ» ¼öµµ ÀÖ°í, -1 ÀÏ °æ¿ì ¹«Á¦ÇÑÀ̸ç, default ´Â 0
- maxIdle
dle connection ÀÇ ÃÖ´ë °³¼ö·Î, default ´Â 8
- maxWait
»õ·Î¿î connection À» ¾ò±â À§ÇØ ´ë±âÇÏ´Â ½Ã°£ (msec) À¸·Î, ÀÌ ½Ã°£¿¡ µµ´ÞÇÏ°Ô µÇ¸é exception ÀÌ ¹ß»ýÇϸç, default ´Â -1 ·Î ¹«Á¦ÇÑ
- validationQuery
connection À¯È¿¼º üũ query ·Î default ´Â null ÀÌ´Ù. ¸¸ÀÏ MySQL/MariaDB/PPAS/PostgreSQL ¿¡ Àû¿ëÇÏ·Á¸é select 1, Oracle ¿¡ Àû¿ëÇÏ·Á¸é select 1 from dual À» »ç¿ëÇÑ´Ù.
BasicDataSource.java ³» ·ÎÁ÷Àº ´ÙÀ½°ú °°´Ù.
public void setValidationQuery(String validationQuery) {
if (validationQuery != null && validationQuery.trim().length() > 0) {
this.validationQuery = validationQuery;
} else {
this.validationQuery = null;
}
}
À§ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ¿¬°áµÈ´Ù. PoolableConnectionFactory.java ÆÄÀÏÀÌ´Ù.
public void validateConnection(PoolableConnection conn) throws SQLException {
if(conn.isClosed()) {
throw new SQLException("validateConnection: connection closed");
}
conn.validate(_validationQuery, _validationQueryTimeout);
}
- validationQueryTimeout
default ´Â -1 À̸ç , BasicDataSource.java ¿¡¼ private volatile int validationQueryTimeout = -1; ·Î Á¤ÀǵǾî ÀÖ´Ù.
- testWhileIdle
idle connection ´ë»óÀ¸·Î validationQuery ¸¦ ¼öÇàÇÏ¿© ¹®Á¦°¡ ¹ß»ýÇÒ °æ¿ì pool ¿¡¼ Á¦°ÅÇÑ´Ù. ±×¸®°í ±× ÁÖ±â´Â timeBetweenEvictionRunsMillis Àε¥ ¹°·Ð validationQuery °¡ ¿ì¼±ÇÑ´Ù.
- minEvictableIdleTimeMillis
ÀÌ ½Ã°£ÀÌ Áö³ idle connection À» ´ë»óÀ¸·Î minIdle ¼ö¿¡ µµ´ÞÇÒ ¶§±îÁö pool ¿¡¼ Á¦°ÅÇϸç, default ´Â 60000 (msec)
- testOnBorrow
default ´Â false À̸ç, pool ¿¡¼ ²¨³»±â Àü¿¡ validationQuery ¸¦ ¼öÇàÇÑ´Ù. validationQuery ´Â null ÀÌ ¾Æ´Ï¾î¾ß ÇÑ´Ù.
- testOnReturn
default ´Â false À̸ç, pool ¿¡ ¹Ý³³Çϱâ Àü¿¡ validationQuery ¸¦ ¼öÇàÇÑ´Ù. validationQuery ´Â null ÀÌ ¾Æ´Ï¾î¾ß ÇÑ´Ù.
´ÙÀ½Àº org.apache.tomcat.jdbc.pool.DataSource ¿¡¼ Á¦°øÇÏ´Â Ãß°¡ÀûÀÎ Ç׸ñÀÔ´Ï´Ù.
- initSQL
connection ÀÌ ÃÖÃÊ »ý¼ºµÉ ¶§ ½ÇÇàµÇ´Â query ·Î default ´Â null
- validationInterval
ÀÌ ½Ã°£ ¾È¿¡´Â validationQuery ¸¦ ÇÏÁö ¾ÊÀ¸¸ç, default ´Â 30000 (msec)
µµÅ¥¸àÆ®¿¡ µû¸£¸é DB ¿Í ¿¬°áµÇ´Â ½ÃÁ¡, Áï initialSize ¸¸ÅÀÇ connection ÀÌ pool ¿¡ »ý¼ºµÇ´Â ½ÃÁ¡Àº ¾Æ·¡¿Í °°ÀÌ DataSource ¼³Á¤À» ¾î´À °÷¿¡ Çß´À³Ä¿¡ µû¶ó ´Þ¶óÁý´Ï´Ù.
- GlobalNamingResources ¿¡ ¼³Á¤ÇÑ °æ¿ì Tomcat ÀνºÅϽº¸¦ ±âµ¿ÇÒ ¶§ »ý¼º
- context ¿¡ ¼³Á¤ÇÑ °æ¿ì ù request °¡ µé¾î¿Ã ¶§ »ý¼º
±×·¯³ª Å×½ºÆ® °á°ú ¸ðµÎ Tomcat ±âµ¿ ½Ã »ý¼ºµÇ´Â °ÍÀ¸·Î È®ÀεǾú½À´Ï´Ù.