출처 : http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
데이터 소스를 사용하는 간단한 예 :
package com.sp.jakarta; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import org.apache.tomcat.jdbc.pool.DataSource; import org.apache.tomcat.jdbc.pool.PoolProperties; public class SimplePOGOExample { public static void main(String[] args) throws Exception{ PoolProperties p =new PoolProperties(); p.setUrl("jdbc:mysql://localhost:3306/mysql"); p.setDriverClassName("com.mysql.jdbc.Driver"); p.setUsername("root"); p.setPassword("1234"); p.setJmxEnabled(true); p.setTestWhileIdle(false); p.setTestOnBorrow(true); p.setValidationInterval(30000); p.setTimeBetweenEvictionRunsMillis(30000); p.setMaxActive(100); p.setInitialSize(10); p.setMaxWait(10000); p.setRemoveAbandonedTimeout(60); p.setMinEvictableIdleTimeMillis(30000); p.setMaxIdle(10); p.setLogAbandoned(true); p.setRemoveAbandoned(true); p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState" + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); DataSource dataSource = new DataSource(); dataSource.setPoolProperties(p); Connection conn = null; try { conn = dataSource.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from user"); int cnt = 1; while (rs.next()){ System.out.println((cnt++) + ". HOST:" + rs.getString("HOST") + " User:" + rs.getString("User") + " Password:" + rs.getString("Password")); } rs.close(); st.close(); } finally { if(conn != null) try { conn.close(); } catch (Exception e) { } } } }
JNDI조회를 위한 resource를 구성하는 방법(<br/> 제외)
auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" testWhileIdle="true" testOnBorrow="true" testOnReturn="false" validationQuery="SELECT 1" validationInterval="30000" timeBetweenEvictionRunsMillis="30000" maxActive="100" minIdle="10" maxWait="10000" initialSize="10" removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" jmxEnabled="true" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState; org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" username="root" password="password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mysql"/>
Asyncronous Connection Retrieval (비동기 연결 검색)
톰캣 JDBC pool connection은 라이브러리에 스레드를 추가하지 않고도 비동기 연결 검색을 지원한다.
이것은 추후의 <Connection> getConnectionAsync() </Connection>을 호출하여 데이터 소스에 메서드를 추가하는 작업을 수행한다.
이러한 비동기 검색을 사용하기 위해서는 두가지 조건이 충족되어야 한다.
fairQueue property를 true로 하고, org.apache.tomcat.jdbc.pool.DataSource 데이터 소스를 캐스팅 해야한다.
비동기 기능을 사용하는 예 :
Connection con = null; try { Futurefuture = datasource.getConnectionAsync(); while (!future.isDone()) { System.out.println("Connection is not yet available. Do some background work"); try { Thread.sleep(100); //simulate work }catch (InterruptedException x) { Thread.currentThread().interrupt(); } } con = future.get(); //should return instantly Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from user");
'DBMS' 카테고리의 다른 글
Virtual Hosting and Tomcat (가상 호스팅과 톰캣) - (직역) (0) | 2013.07.30 |
---|---|
JDBC Connection Pool (1) | 2013.07.30 |