sql >> Databasteknik >  >> RDS >> Mysql

c3p0 säger - java.lang.Undantag:ENDAST DEBUG:Försenad resursutcheckning stackspårning vid start av en vilotransaktion

Några förslag för att felsöka det

  • Som Steve nämnde i kommentarerna. Försök att se vad som händer när du tar bort alternativet unreturnedConnectionTimeout.

  • Dina frågor kanske tar för lång tid. Försök att logga lite prestandastatistik på din kod och se hur lång tid din fråga tar. Du kanske behöver justera din fråga. och på kort sikt kan du också öka unreturnedConnectionTimeout till att vara mer än svarstiden på dina frågor.

  • Prova också alternativet för transaktionstimeout i viloläge. Kan ställas in tx.setTimeout(20) och leka med timeoutsiffrorna och se om några frågor timeout.

  • Du kanske också vill använda något profileringsverktyg. Testa VisualVM om din Java-version stöds på den. Annars (om på linux eller mac) kanske du vill prova Java Debugging-kommandon på äldre version av java. Vissa av dessa kommandon är också tillgängliga från JDK.

Små förbättringar av koden

  • Inte säker på om det verkligen kommer att lösa ditt problem men du kanske vill lägga till återställning för transaktion i undantagsblock. Lade till ytterligare en try catch för tx.close för att undvika ett annat undantag.

  • Lade också till en nollkontroll för sessionsstängning. Du kanske redan vet att ett villkor när det äntligen inte exekveras helt - om ett annat undantag slängs in blockerar äntligen. För närvarande kanske det inte är tillämpligt i din kod, men om du lägger till mer än en rad i finalblocket, se till att eventuella undantag täcks så att nästa rad kan köras.

  • Ytterligare ett förslag är att minska själva transaktionens omfattning. Om du tittar på koden verkar det som att du kan behöva transaktionen endast om en uid inte hittas. Vad sägs om att begränsa transaktionskoden inuti if(u==null) block. Inte säker på om det hjälper men du behöver inte ha transaktionen att läsa.

Nedan är min exempelkod

    public static Basicinfo getBean(Integer iduser) {
    Basicinfo u = null;
    Transaction tx = null;
    Session sess = NewHibernateUtil.getSessionFactory().openSession();
    try {

        Query q = sess.createQuery("from Basicinfo where iduser=" + iduser);
        u = (Basicinfo) q.uniqueResult();
        if (u == null) {
            tx = sess.beginTransaction();   //line 69
            u = new Basicinfo();
            u.setIduser(iduser);
            tx.commit();
        }           
    } catch (Exception ex) {
        ex.printStackTrace();
        if(tx != null) {
            try {
             tx.rollback();
            } catch(Exception e){e.printStackTrace;}
        }
    } finally {
        if(sess!=null) {
         sess.close();
        }
    }
    return u;
}


  1. Ta bort konstiga tecken (A med hatt) från SQL Server varchar-kolumnen

  2. Skapa ett databaspostkonto i SQL Server (T-SQL)

  3. mysql lagrad procedurfel (1172, 'Resultat bestod av mer än en rad')

  4. Hur tar man bort filer när en post raderas?