EventListener 和可重试
EventListener and retryable
我想在我的应用程序启动后调用一些代码。有没有办法处理事件:
Started SomeApp in 14.905 seconds (JVM running for 16.268)
如果另一个应用程序启动,我将尝试。我试过使用 Retryable 但没有在应用程序启动之前执行它并抛出异常,因此应用程序退出。
@EventListener
fun handleContextRefresh(event: ContextRefreshedEvent) {
retryableInvokeConnection()
}
@Retryable(
value = [RetryableException::class, ConnectionException::class],
maxAttempts = 100000,
backoff = Backoff(delay = 5)
)
private fun retryableInvokeConnection() {
}
@Recover
private fun retryableInvokeConnectionExceptionHandler(ex: ConnectionException) {
}
也许我应该使用 PostConstruct 和 while 循环。
您不能在同一个 bean 中调用 @Retryable
方法,它会使用重试拦截器绕过代理。将方法移动到另一个bean并注入它。
事件是比使用 @PostConstruct
更好的方法。
我想在我的应用程序启动后调用一些代码。有没有办法处理事件:
Started SomeApp in 14.905 seconds (JVM running for 16.268)
如果另一个应用程序启动,我将尝试。我试过使用 Retryable 但没有在应用程序启动之前执行它并抛出异常,因此应用程序退出。
@EventListener
fun handleContextRefresh(event: ContextRefreshedEvent) {
retryableInvokeConnection()
}
@Retryable(
value = [RetryableException::class, ConnectionException::class],
maxAttempts = 100000,
backoff = Backoff(delay = 5)
)
private fun retryableInvokeConnection() {
}
@Recover
private fun retryableInvokeConnectionExceptionHandler(ex: ConnectionException) {
}
也许我应该使用 PostConstruct 和 while 循环。
您不能在同一个 bean 中调用 @Retryable
方法,它会使用重试拦截器绕过代理。将方法移动到另一个bean并注入它。
事件是比使用 @PostConstruct
更好的方法。