2 votes

problème de connexion JDBC de spring avec postgres

J'ai une api dans Spring qui effectue des opérations grossières sur la base de données postgres. Après quelques insertions, elle essaie d'ouvrir une nouvelle connexion jdbc et se bloque pour toujours.

[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     
[org.hibernate.impl.SessionImpl@3a1ca1a4] for Hibernate transaction
[DEBUG,HibernateTransactionManager,main] Preparing JDBC Connection of Hibernate Session   [org.hibernate.impl.SessionImpl@3a1ca1a4]
[DEBUG,JDBCTransaction,main] begin
[DEBUG,ConnectionManager,main] opening JDBC connection

il s'arrête ici pour chaque, quelqu'un peut-il suggérer quelque chose s'il vous plaît ? Je n'ai aucune idée

0voto

Myo Points 1

Vous devez fermer la transaction et la session après avoir effectué l'opération. Si la session et la transaction en cours n'étaient pas ouvertes et que vous avez ouvert une nouvelle transaction pour une nouvelle opération. Cela provoquera un blocage de votre base de données.

0voto

hurricane Points 3550

Exemple de clôture de transaction et de session. Trouvez votre classe autowired et changez comme mon exemple.

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;

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X