连接池缺乏连接

时间:2018-05-24 12:24:17

标签: java connection pool

下面的朋友们是我的代码,用于构建一个通用类,以便让DB连接在独立的应用程序中执行迭代。

import com.mchange.v2.c3p0.ComboPooledDataSource;

    public class DBHandler {            
        private static DBHandler  datasource;
        private static ComboPooledDataSource cpds;
        private static String user,ip;
        private static String db="";
        static DBHandler database;
        static Connection con;          
        static {        
            ip="my ip address";
            db="test";
        }           
         public static Connection dbconnection(){
             try {
                 if(database==null){
                     database=new DBHandler();
                 }
                 if(cpds.getNumConnections()==cpds.getMaxPoolSize()){
                     //cpds.close();//what will happen if i use close() like this.
                     database=new DBHandler();//will this line creates a new datasource                      
                 }
                 return database.getConnection();           
             } catch (Exception e) {
            }
             return null;
         }          
         DBHandler() throws IOException, SQLException, PropertyVetoException {
             String url;
             if(ip.startsWith("sqlserver")) {
                 url="jdbc:" +ip+";databaseName="+db+";selectMethod=cursor";
                 user="user";
             }
             else {
                 url="jdbc:" +  ip +    "/"+db;
                 user="root"; 
             }
             cpds = new ComboPooledDataSource();
             cpds.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //loads the jdbc driver
             cpds.setJdbcUrl(url);
             cpds.setUser("user");
             cpds.setPassword("password");  
             cpds.setMinPoolSize(2);
             cpds.setAcquireIncrement(1); 
             cpds.setMaxPoolSize(15);
             cpds.setMaxIdleTime(120);
         }

          public static DBHandler getInstance() throws IOException, SQLException, PropertyVetoException {
             if (datasource == null) {
                 datasource = new DBHandler();
                 return datasource;
             } else {
                 return datasource;
             }
         }
         public Connection getConnection() throws SQLException { 
             Connection con=null;
             con= this.cpds.getConnection(); 
             return con;
         }      
    }

我的问题在几次交易后,我的连接已经结束,应用程序处于挂起状态。

疑问1:这段代码将创建新的数据源或对同一个池的新引用。 疑问2:如何创建通用方法来关闭同一类中的空闲连接,而不是我使用连接的地方。 我的setMaxIdleTime将在指定时间后关闭()与池的连接。

如何在一段时间后关闭连接。     请帮帮我,我推荐谷歌,但没有找到任何相关的答案

我们只是使用一些核心概念,因此不能使用框架来使用通用的ConnectionPool类。

0 个答案:

没有答案