私はトランザクションロックとその回復を処理するためのソリューションを考え出しています。Java(PostgreSQL)でトランザクションロックを処理する方法
私はこのような次のコードを持っている:
try {
Connection conn = DriverManager.getConnection(url, userName, password);
Connection conn2 = DriverManager.getConnection(url, userName, password);
conn.setAutoCommit(false);
conn2.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
conn2.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
Statement stmt = conn.createStatement();
Statement stmt2 = conn2.createStatement();
stmt.setQueryTimeout(100);
stmt.executeUpdate("update layout set HEIGHT = 45 where ID = 2");
stmt2.setQueryTimeout(10);
stmt2.executeUpdate("update layout set HEIGHT = 12 where ID = 2");
conn2.commit();
conn.commit();
System.out.println("Done....");
}
//TODO: should be throwing it back..
catch (Exception e) {
e.printStackTrace();
}
は今、私は2つの別々のトランザクションでlayout
テーブルを更新しています。これでロックが発生するので、setQueryTimeout
を使用してその状況をカバーし直します。
しかし、私は実際にsetQueryTimeout
がトランザクションロックを処理して回復する正しい方法であるかどうかはわかりません。その他のベストプラクティスはありますか?
私はORMのかなり普通のJavaを使用していないことに注意してください。
「悲観的なロック」と「楽観的なロック」という理論はほとんど知られていませんか?多くのシナリオや多くの要件が存在する可能性があるため、一般的に「復旧」の仕方は難しいです。企業のソフトウェアの重要な問題の1つです –
あなたは銀行か大きいインターネットショップを想像し、あなたはクライアントです。 「トランザクション回復ポリシー」はどのように設計する必要がありますか? –
@JacekCz:申し訳ありませんが、私はこれを認識していません。 – batman