ÃֽŠ°Ô½Ã±Û(OS/WAS)
2017.06.15 / 10:47

Tomcat ÀÇ DataSource (JDBC Connection Pool) ¼³Á¤

XMaLL°ü¸®ÀÚ
Ãßõ ¼ö 210

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 &amp;&amp; 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 ±âµ¿ ½Ã »ý¼ºµÇ´Â °ÍÀ¸·Î È®ÀεǾú½À´Ï´Ù.