2016-09-22 3 views
1

У меня есть класс Calc Runner. В этом классе 4 метода, выполняемых не на основе количества таких компаний, как это.Как реализовать Multi_threading с пулом соединений

 for(long companyId : companies){ 
method1(); 
method2(); 
method3(); 
method4(); 
} 

В этой связи методы получать от DBStatic Util class.Like это `

try { 
      synchronized (LOCK_OBJCT) { 
       if (_conn == null || _conn.isClosed()) { 
        Class.forName(DB_DRIVER); 
        logger.debug("Connecting to: " + DB_URL + "; as: " + DB_USERID); 
        _conn = DriverManager.getConnection(DB_URL, DB_USERID, DB_PASSWORD); 
        _conn.setAutoCommit(false); 
       } 
       else { 
        logger.debug("Connected to: " + DB_URL + "; as: " + DB_USERID); 
       } 
      } 
     } catch(ClassNotFoundException ce) { 
      logger.error("Error when obtaining JDBC driver.Exiting...", ce); 
      System.exit(1); 
     } catch(SQLException e) { 
      logger.error("Error when obtaining insight db conn: " + DB_URL + "; as: " + DB_USERID + " Exiting..." , e); 
      System.exit(1); 
     } 

     return _conn; 
    }` 

I мы реализовали много поточность с ExcutiveService с 4 пула потоков. все методы выполняются в потоке. знать, что является проблемой при подключении. Объединение нескольких потоков не работает должным образом. Как реализовать программу JDBC для объединения пулов для этой многопоточной обработки.

+0

Я использую 'java-ee', тогда сервер управляет всем этим для вас - ему просто нужна какая-то конфигурация. Нет необходимости повторно изобретать это колесо. –

ответ

0

Вы должны создать объединенное соединение и указать свой лимит подключения. Тогда вы можете достичь пула соединений

PooledConnectionDataSource ds = new PooledConnectionDataSource(); 
ds.setDescription("Oracle Data Source"); 
// Refer to a previously registered pooled data source to access 
// a ConnectionPoolDataSource object 
ds.setDataSourceName("jdbc/ConnectOracle"); 
// The pool manager will be initiated with 5 physical connections 
ds.setInitialPoolSize(5); 
// The pool maintenance thread will make sure that there are 5 
// physical connections available 
ds.setMinPoolSize(5); 
// The pool maintenance thread will check that there are no more 
// than 10 physical connections available 
ds.setMaxPoolSize(10); 
// The pool maintenance thread will wake up and check the pool 
// every 20 seconds 
ds.setPropertyCycle(20); 
// The pool maintenance thread will remove physical connections 
// that are inactive for more than 300 seconds 
ds.setMaxIdleTime(300); 
// Set tracing off since we choose not to see output listing 
// of activities on a connection 
ds.setTracing(false); 
+0

В многопотоковой среде, в то время как мы закрываем соединение, мы получаем исключение, такое как соединение уже закрыто. Мы реализовали с помощью Jdbc3PoolingDataSource –

Смежные вопросы