Jakarta DBCP¸¦ StandAlone Application¿¡¼ »ç¿ëÇϱâ -
java application standalone org.apache.commons.dbcp.BasicDataSource
Tomcat¿¡¼µµ ¾²ÀÌ°í ÀÖ´Â À¯¸íÇÑ DB Connection Pool LibraryÀÎ DBCP¸¦ ÀÏ¹Ý StandAlone ÇüÅÂÀÇ Application¿¡¼¾µ ÀÏÀÌ »ý°å´Ù.
º¸Åë WAS¿¡ °°ÀÌ »ç¿ëµÇ´ÂÁö¶ó WAS¿¡¼ÀÇ ¼¼ÆÃ(JNDI¸¦ »ç¿ë)ÇÏ´Â ¿¹Àú´Â ¸¹¾ÒÀ¸³ª ÀÏ¹Ý Application ¿¹Á¦´Â Àß º¸ÀÌÁö ¾Ê¾Æ¼ DBCP »çÀÌÆ®ÀÇ Example ÆÄÀÏÀ» Âü°íÇÏ¿© Å×½ºÆ® ÇØ º» ´ÙÀ½¿¡ »ç¿ëÇß´Ù.(÷ºÎÆÄÀÏ ÂüÁ¶)
¿¹Á¦ ÆÄÀÏÀ» º¸¸é Å©°Ô ³× ºÎºÐÀ¸·Î ³ª´²º¼ ¼ö ÀÖ´Ù.
DBCP¸¦ ¼³Á¤ÇÏ´Â ºÎºÐ, »ç¿ëÇÏ´Â ºÎºÐ, Á¾·áÇÏ´Â ºÎºÐ, ÇöÀç »ç¿ëÇöȲÀ» º¸´Â ºÎºÐÀÌ´Ù.
°¢ ºÎºÐ¿¡ ´ëÇؼ ³»°¡ »ç¿ëÇÑ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.
(±âº»ÀûÀ¸·Î ÷ºÎÇÑ ¼Ò½º¸¦ Âü°í·Î ÇÏ¿© »ç¿ëÇÏ¿´À¸¹Ç·Î °°ÀÌ Âü°íÇÏ´Â°Ô ÁÁÀ»µí..)
1. DBCP ¼³Á¤ºÎºÐ
private static void setupDriver() {
try {
/*
* ÀϹÝÀûÀÎ Object PoolÀ» »ý¼ºÇÑ´Ù.
* MAX_ACTIVE : Active °¡´ÉÇÑ ÃÖ´ë object °¹¼ö(ÇÊ¿ä¿¡ µû¶ó Á¤ÇÑ´Ù.)
* GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK : PoolÀÌ °¡µæ Â÷¸é ´ÙÀ½
* ÀÌÀü °´Ã¼°¡ return µÉ ¶§±îÁö block ÇÏ°í ±â´Ù¸°´Ù.
* MAX_WAIT : Block ½Ã ±â´Ù¸± ÃÖ´ë ½Ã°£(ms, ÇÊ¿ä¿¡ µû¶ó Á¤ÇÑ´Ù.)
* MAX_IDLE : ÃÖ´ëÇÑ À¯ÁöÇÒ idle objectÀÇ °¹¼ö. ÁöÁ¤µÈ ÀÌ»ó ³²À¸¸é Æó±âÇÑ´Ù.
* (ÇÊ¿ä¿¡ µû¶ó Á¤ÇÑ´Ù.)
*/
connPool = new GenericObjectPool(null, MAX_ACTIVE,
GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK,
MAX_WAIT, MAX_IDLE);
/*
* ¿¬°áÇÒ DBÀÇ URL, User¸í, Password¸¦ ¼¼ÆÃÇÑ´Ù.
*/
ConnectionFactory connectionFactory =
new DriverManagerConnectionFactory(ServerConnector.getDatabaseUrl(),
ServerConnector.getMisUser(),
ServerConnector.getDatabasePassword());
/*
* ConnectionPool Factory¸¦ »ý¼ºÇÑ´Ù.
* PoolableConnectionFactory(ConnectionFactory connFactory,
* ObjectPool pool, KeyedObjectPoolFactory stmtPoolFactory,
* String validationQuery, boolean defaultReadOnly, boolean defaultAutoCommit)
*/
new PoolableConnectionFactory(connectionFactory, connPool, null, null,
false, true);
/*
* Pool Driver¸¦ ·ÎµùÇÑ´Ù.(org.apache.commons.dbcp.PoolingDriver)
*/
Class.forName(POOLING_DRIVER);
/*
* DB Driver¸¦ ·ÎµùÇÑ´Ù.(oracle.jdbc.driver.OracleDriver)
*/
Class.forName(ORACLE_DRIVER);
/*
* Pooling Driver¸¦ ·ÎµùÇÑ´Ù.(jdbc:apache:commons:dbcp:)
*/
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver(DRIVER_URL);
/*
* driver¸¦ µî·ÏÇÑ´Ù.(º»ÀÎÀÌ ÁöÁ¤ÇÑ À̸§)
*/
driver.registerPool(POOL_NAME, connPool);
CommonLogger.getAllLogger().info("DB Connection setup completed.");
} catch (Throwable th) {
}
}
2. DBCP »ç¿ëÇÏ´Â ¹æ¹ý
¿¬°áµÈ Connection PoolÀ» »ç¿ëÇÒ ¶§¿¡´Â ÀϹÝÀûÀÎ JDBC ÇÁ·Î±×·¥°ú °°ÀÌ »ç¿ëÇÑ´Ù
public static Connection getConnection() {
try {
/*
* °¢ º¯¼ö°¡ ÀǹÌÇÏ´Â ¹Ù´Â 1¹ø ¿¹Á¦ ÂüÁ¶
*/
return DriverManager.getConnection(DRIVER_URL + POOL_NAME);
} catch (Exception e) {
logger.error("Error getting Connection.", e);
return null;
}
}
Âü°í·Î »ç¿ëÇÏ´ø DBCP¸¦ ¸®ÅÏÇÒ °æ¿ì¿¡µµ ÀÏ¹Ý JDBC ÇÁ·Î±×·¡¹Ö ÇϵíÀÌ connection.close¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
3. DBCP »ç¿ë Á¾·áÇÏ´Â ºÎºÐ
´õÀÌ»ó ÇØ´ç Connection PoolÀ» »ç¿ëÇÏÁö ¾ÊÀ» ¶§¿¡´Â ´ÙÀ½°ú °°ÀÌ Á¾·áÇÑ´Ù.
public static void shutdownDriver() throws Exception {
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver(DRIVER_URL);
driver.closePool(POOL_NAME);
}
4. DBCP »ç¿ëÇöȲÀ» Ãâ·ÂÇÏ´Â ºÎºÐ
1 ¹ø¿¡¼ »ý¼ºÇÑ connPool °´Ã¼¸¦ ÀÌ¿ëÇÑ »ç¿ë·® üũ
- ÇöÀç Active »óÅ¿¡ ÀÖ´Â ConnectionÀÇ ¼ö : connPool.getNumActive()
- ÇöÀç ³î°í ÀÖ´Â(Idle) ConnectionÀÇ ¼ö : connPool.getNumIdle()
ManualPoolingDriverExample.java