OptimisticLockingRetryHandler

From DarkWiki
Jump to: navigation, search
import org.springframework.dao.OptimisticLockingFailureException;

import java.util.function.Supplier;

public class OptimisticLockingRetryHandler {
    private static final Logger LOG = LoggerFactory.getLogger(OptimisticLockingRetryHandler.class);

    public static void withRetry(Runnable execution) {
        int maxTry = 3;
        for (int retryCount = 0; retryCount < maxTry; retryCount++) {
            try {
                execution.run();
                return;
            } catch (OptimisticLockingFailureException ex) {
                LOG.error("TRY {} Optimistic locking exception", retryCount, ex);
                if (retryCount == maxTry - 1) {
                    throw ex;
                }
            }
        }
    }

    public static <R> R withRetry(Supplier<R> execution) {
        int maxTry = 3;
        for (int retryCount = 0; retryCount < maxTry; retryCount++) {
            try {
                return execution.get();
            } catch (OptimisticLockingFailureException ex) {
                LOG.error("TRY {} Optimistic locking exception", retryCount, ex);
                if (retryCount == maxTry - 1) {
                    throw ex;
                }
            }
        }
        return null;
    }
}