2016-07-01 3 views
0

Ich habe Schwierigkeiten zu bestimmen, wenn meine Verbindung unterbrochen wird, was zufällig für mich passiert. Ich habe versucht, einen Timer einzustellen, um anzuzeigen, wenn die Verbindung einfror (für meinen Fall sollte jede Aufgabe, die die Verbindung verwendet, nicht mehr als ein paar Sekunden dauern), aber das scheint nicht zu funktionieren.Java: Wie starte ich eine Datenbankverbindung neu, wenn sie eingefroren oder getrennt wurde?

Ich sollte auch für die Verbindung beachten, mehrere Threads laufen zur gleichen Zeit eine Art von Aufgabe, wenn ein Thread noch am Leben ist oder nicht unterbrochen und es war nach der zugewiesenen Zeit, um die Aufgabe abzuschließen, dann, Für mich deutet das auf ein Verbindungsproblem hin. Hier

ist der Kern dessen, was ich getan habe:

 public void run(){ 
      super.run(); 

      try { 

        Timer timer = new Timer(true); 
        TimerTask task = new TimerTask(){ 

         @Override 
         public void run() { 


          if(isAlive() || interrupted()){//there is a problem with the connection, but I never enter this case... 

           interrupt(); 
           timer.cancel(); 
           //end the connection and restart it all over again 
           try { 
            conn.close(); 
            restartConnection(); 
           } catch (SQLException e) { 
            e.printStackTrace(); 
           } 

          } 
          else{//there is no problem with the connection 

          } 
         } 
        }; 
        timer.schedule(task, 5000);//each task should not take anywhere near 5 secs, if it does, then I THINK there is a connection problem 
        timer.cancel(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

Antwort

1

Die meisten der DB-Verbindung Einfrieren tritt auf, wenn eine Tabellensperre ist. Die Verbindung wird von diesem bestimmten Thread gehalten, bis diese Sperre aufgehoben wird. Die nächsten Threads warten also auf die Verbindungen aus dem Verbindungspool, die jetzt leer sind. Bitte schauen Sie nach, ob es irgendwelche Tablelocks gibt.

Verwandte Themen