Frühjahr Transaktions-TimeOut
Ich versuche, mit Feder @Transactional
annotation und timeout
parameter. Im wesentlichen habe ich den code testen mit einige Thread.sleep()
codes. Dann bekomme ich die timeout-Ausnahme, wie ich erwartet hatte. Auch möchte ich, um timeout-exception, wenn die Datenbank-Operationen dauern länger als mein Zeitlimit. Sperre ich einen Datensatz in eine Tabelle in meiner Datenbank mit update für die select-Anweisung. Ich versuche zu aktualisieren, dass die Aufzeichnung. Aber das Programm warten und nichts tun. Hier mein Beispiel-code.
@Transactional(rollbackFor = Exception.class, timeout=5)
public void executeService(List<sendData> list) throws Exception{
List<sendData> newList = gDAO.updateSentList(list);
}
In diesem Fall sollte das Programm werfen timeout-exception. Wie kann ich es beheben?
Diese Frage sieht ähnlich aus wie mein problem, stackoverflow.com/questions/31876975/...
Was Transaktions-system verwenden Sie?
Ich bin mit JDBC Transaktion system für db-Operationen.
Was Transaktions-system verwenden Sie?
Ich bin mit JDBC Transaktion system für db-Operationen.
InformationsquelleAutor Uğur Yeşilyurt | 2015-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Endlich habe ich die Lösung gefunden...
Kurze Antwort ist, dass das problem in einer Art und Weise, wie Sie testen den timeout -
Thread.sleep()
kann nicht verwendet werden...Lange Antwort:
Was ich benutzen musste (weil ich getestet mit MySQL), war ein echtes statement -
select sleep(5)
. Dieser Aufruf endete mit:Vom Stapel dies erregte meine Aufmerksamkeit:
StatementPreparerImpl$StatementPreparationTemplate.setStatementTimeout(StatementPreparerImpl.java:208)
...also ich wollte versuchen mit einem anderen use-case -
resultierte in:
und im log steht auch:
wichtiger Bestandteil der spring-Konfiguration (nicht erwarten etwas besonderes):
org.springframework.jdbc.datasource.DataSourceTransactionManager
bean undorg.springframework.jdbc.datasource.DriverManagerDataSource
bean undannotation-driven transaction-manager
in meinem datasource Kontext. Ich glaube nicht, verwenden hibernate. Getestet habe ich in diesem Fall mitDBMS_LOCK.sleep(10);
und meine Transaktions-timeout 5 Sekunden, aber ich bekam keine Ausnahme. Wenn ich Debuggen Sie den code, wenn ich warte oder hinzufügen thread.schlafen code, bekomme ich die timeout exception. DB-Transaktion hat keine Auswirkungen auf meine Transaktions-timeout.Hier ist meine Frage wie ich das versteht, Ihr aber nicht JTS.
http://stackoverflow.com/questions/7469661/how-jta-jts-handle-transaction-time-out-issue
. Ist die Antwort Recht? Aber wie kann ich dieses Problem.Wenn Sie versuchen, folgenden code, Sie wahrscheinlich begegnen werden, meine situation. Ich denke java control Zeit nur im java-code. Es nimmt nicht jdbc-Zeit berücksichtigt. @Transactional(timeout=10) public void mysqlWait() { System.aus.println("timeout:" + sessionFactory.getCurrentSession().getTransaction().getTimeout()); SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery("select sleep(15)"); System.aus.println("ausgeführt (" + i + "): "+ query.uniqueResult()); }
InformationsquelleAutor Betlista
Ich mein problem gelöst mit
oracle.jdbc.ReadTimeout=60000
auf der Anwendungs-Kontext.@Transactional
annotation funktionieren nicht auf jdbc Lesen timeout exception.InformationsquelleAutor Uğur Yeşilyurt