状況は、getConnection を試行したときに RecoveryThread が 1 つだけ作成されるようにする必要があり、PrimaryData Source の getConnection で失敗した場合、私が持っているコードは次のとおりです。
public Connection getConnection() throws SQLException {
if (isFailedOver()) {
try {
return failoverDataSource.getConnection();
} catch (SQLException e) {
throwBigError();
}
}
Connection connection = null;
try {
connection = dataSource.getConnection();
return connection;
}
catch (SQLException unexpected) {
return requestFailover();
}
}
private Connection requestFailover() throws SQLException {
this.dbFailoverMutex.requestFailover();
DBFailoverRecoveryService recoveryService = new DBFailoverRecoveryService(this.dbFailoverMutex,this.dataSource);
Thread recoveryServiceThread = new Thread(recoveryService, "DBFailover Recovery Service");
recoveryServiceThread.start();
try {
return failoverDataSource.getConnection();
} catch (SQLException e) {
throwBigError();
}
return null;
}
getConnection を試行する 2 つの異なるスレッドがある場合、これにより requestFailover() メソッドが 2 回呼び出される可能性があり、2 回呼び出されると、2 つの recoveryService スレッドが作成されることになります。
よろしくお願いします。