Lightweight Java library for retrying unreliable logic - DEPRECATED
Issue #28 (enhancement) - CallExecutor
now has a builder instead of having to be instantiated directly.
Issue #72 (bug) - Fixed CallExecutor
not knowing the type of a result.
Issue #68 (bug) - Fixed issue where retryOnAnyExceptionExcluding
config option did not actually work if you specified more than one exception.
Issue #69 (bug) - Made it so withDelayBetweenTries
config option will default to 0 if it is not specified rather than causing a NullPointerException
.
Issue #70 (enhancement) - Added a feature where custom retry-on-exception behavior can be defined (see documentation here: https://github.com/elennick/retry4j#exception-handling-config)
Issue #71 (bug) - Fixed an issue where it was possible to specify a config value for withMaxNumberOfTries
that was less than 1.
Issue #67 (enhancement) - Updated AsyncCallExecutor
to not utilize a thread pool unless one is set.
Issue #65 (bug) - Fixed an issue where beforeNextTry
listener would be called even when another try was not going to be executed.
Issue #50 (enhancement) - BackoffStrategy
's can now specify validation logic. All default BackoffStrategy
's now have logic that requires a time-between-retries be specified EXCEPT for the No Wait backoff strategy.
Issue #24 (enhancement) - It is now possible to add an optional Call Name when executing a call. This allows the ability to attach a human-friendly name/description to the call status if desired.
Issue #46 (enhancement) - Refactored the listener interface to be cleaner. See documentation for specific details. Issue #33 (enhancement) - Added documentation about SLF4J usage. Issue #13 (enhancement) - Added a new retry4j-examples repo and added it to the README. Has some initial examples of the library being used but it will be fleshed out further going forward.
Issue #48 (enhancement) - The BackoffStrategy
interface now returns a Duration object instead of an integer.
Issue #51 (enhancement) - There is now a retryIndefinitely()
config option you can use in place of withMaxNumberOfTries(#)
if you don't want to specify a maximum.
Issues #23, #16, #40 (bug/enhancements) - Got rid of the old half-baked executeAsync()
method in the CallExecutor()
and created a new executor called AsyncCallExecutor()
to handle async/threaded calls.
Added a new feature:
Issue #43 (enhancement) - Can now retry not only on exceptions but also on returned values. New functionality is detailed in the project README.
Addressed two issues:
Issue #42 (bug) - CallExecutor throws a NullPointerException if a call returns a null value. Issue #41 (enhancement) - RetriesExhaustedException will now have a populated cause. It will be populated with the last exception that occurred before all retries were exhausted.