2016-10-14 167 views
0

我正在爲我的應用程序使用tomcat數據源連接池。我已將最大連接數設置爲20.我一次運行5個併發請求。但是,我的一些電話超時,因爲找不到可用的連接。連接一旦完成就返回游泳池需要多長時間?有沒有什麼屬性可以幫助解決這個問題?Tomcat DataSource - 連接池

我在這個link

回答

2

默認的連接超時60秒看着不同的屬性。

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 SimplePOJOExample { 

    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("password"); 
     p.setJmxEnabled(true); 
     p.setTestWhileIdle(false); 
     p.setTestOnBorrow(true); 
     p.setValidationQuery("SELECT 1"); 
     p.setTestOnReturn(false); 
     p.setValidationInterval(30000); 
     p.setTimeBetweenEvictionRunsMillis(30000); 
     p.setMaxActive(100); 
     p.setInitialSize(10); 
     p.setMaxWait(10000); 
     p.setRemoveAbandonedTimeout(60); 
     p.setMinEvictableIdleTimeMillis(30000); 
     p.setMinIdle(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 con = null; 
     try { 
     con = datasource.getConnection(); 
     Statement st = con.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 (con!=null) try {con.close();}catch (Exception ignore) {} 
     } 
    } 

} 

這裏是如果你發現任何更多的困難,如何爲JNDI查找

<Resource name="jdbc/TestDB" 
     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"/> 

配置資源是指此 https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

+0

感謝@Bhaskara Arani的例子。執行數據庫操作後,連接返回池需要60秒的時間?你能幫忙指出參數嗎? –

+0

這裏所有的參數都提到了,哪些參數需要額外的p.setMaxActive(100); –

+0

或參閱http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html –