2013-04-12 5 views
2

У меня есть api весной, которая выполняет crud операции на postgres db. после нескольких вставок пытается открыть новое соединение jdbc и вечно вешать.Весна JDBC подключение вопрос с postgres

[DEBUG,StatefulPersistenceContext,main] initializing non-lazy collections 
[TRACE,JDBCContext,main] after autocommit 
[DEBUG,ConnectionManager,main] transaction completed on session with on_close connection  release mode; be sure to close the session to release JDBC resources! 
[TRACE,SessionImpl,main] after transaction completion 
[INFO,Initializer,main] Creating publisher user for lisa penny 
[DEBUG,DefaultListableBeanFactory,main] Returning cached instance of singleton bean 'transactionManager' 
[DEBUG,HibernateTransactionManager,main] Creating new transaction with name  [org.temp.demo.core.dao.hb.GenericHibernateDAO.makePersistent]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' 
[DEBUG,SessionImpl,main] opened session at timestamp: 13657283326 
[DEBUG,HibernateTransactionManager,main] Opened new Session  
[[email protected]] for Hibernate transaction 
[DEBUG,HibernateTransactionManager,main] Preparing JDBC Connection of Hibernate Session [[email protected]] 
[DEBUG,JDBCTransaction,main] begin 
[DEBUG,ConnectionManager,main] opening JDBC connection 

Он останавливается здесь для каждого, может ли кто-нибудь предложить что-нибудь, пожалуйста? У меня нет подсказки

+0

Это веб-приложение? Что происходит при перезапуске приложения? (Я предполагаю, что он снова запустится, и после того, как несколько вложений снова будут висеть). У вас есть инструмент для проверки открытых подключений в вашей СУБД? – Rafa

+0

Да, это именно то, что происходит, когда я перезагружаюсь, зависает после нескольких вставок. Это веб-приложение. Мне кажется, что проблема с потоками или предыдущая транзакция не закрываются должным образом. Но убедитесь, что он работает правильно в первые несколько раз. У меня есть pgAdmin3, какой мне нужен инструмент? –

+0

Знаете ли вы, какие транзакции висят? Возможно, висит только тогда, когда вы пытаетесь выполнить определенные операции и, следовательно, знать, что вызывает проблему, может помочь решить вашу проблему. Попробуйте что-то вроде: http://heatware.net/databases/how-active-sql-queries-open-connections-postgres/ – Rafa

ответ

0

Вы должны закрыть транзакцию и сеанс после выполнения операции. Если текущий сеанс и транзакция не открылись, вы открыли новую транзакцию для новой операции. Это приведет к зависанию базы данных.

0

Закрыть пример транзакции и сеанса. Найдите свой автоуровневый класс и измените его в качестве примера.

public ContentResult insertNewContent(Content content) 
    { 
     ContentResult result = this.validateContent(content); 

     if(result.hasErrors() == false) 
     { 
      Session session = this._hibernateSessionFactory.openSession(); 
      Transaction tx = null; 

      try 
      { 
       //important ! 
       tx = session.beginTransaction(); 

       session.save(content); 

       tx.commit(); 

       if(content.get_id() > 0) 
       { 

       } 
       else 
       { 
        result.addError(ContentResult.CODES.ERROR_INVALID_ID); 
       } 

      } 
      catch(HibernateException e) 
      { 
       //important ! 
       if(tx != null) 
       { 
        tx.rollback(); 
       } 
       ContentRepository.logger.error("insertNewContent failed");   
       e.printStackTrace(); 
      } 
      finally 
      { 
       //important ! 
       session.close(); 
      } 
     } 

     return result; 

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