Отсутствие соединений в пуле соединений - PullRequest
0 голосов
/ 24 мая 2018

Привет, друзья, ниже - мой код для создания универсального класса для получения соединений с БД для выполнения итераций в автономных приложениях.

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 закрыть () подключение к пулу через указанное время.

Как закрыть подключение через некоторое время.Пожалуйста, помогите мне, я ссылаюсь на Google, но не нашел никакого связанного ответа

Мы просто используем некоторые основные понятия, поэтому не можем использовать каркасы для использования универсального класса ConnectionPool.

...