类 DeferredResult<T>
- java.lang.Object
- org.springframework.web.context.request.async.DeferredResult<T>
- 类型参数:
T
- the result type
public class DeferredResult<T> extends Object
DeferredResult
provides an alternative to using aCallable
for asynchronous request processing. While aCallable
is executed concurrently on behalf of the application, with aDeferredResult
the application can produce the result from a thread of its choice.Subclasses can extend this class to easily associate additional data or behavior with the
DeferredResult
. For example, one might want to associate the user used to create theDeferredResult
by extending the class and adding an additional property for the user. In this way, the user could easily be accessed later without the need to use a data structure to do the mapping.An example of associating additional behavior to this class might be realized by extending the class to implement an additional interface. For example, one might want to implement
Comparable
so that when theDeferredResult
is added to aPriorityQueue
it is handled in the correct order.- 从以下版本开始:
- 3.2
- 作者:
- Rossen Stoyanchev, Juergen Hoeller, Rob Winch
嵌套类概要
嵌套类 修饰符和类型 类 说明 static interface
DeferredResult.DeferredResultHandler
Handles a DeferredResult value when set.
构造器概要
构造器 构造器 说明 DeferredResult()
Create a DeferredResult.DeferredResult(Long timeoutValue)
Create a DeferredResult with a custom timeout value.DeferredResult(Long timeoutValue, Object timeoutResult)
Create a DeferredResult with a timeout value and a default result to use in case of timeout.DeferredResult(Long timeoutValue, Supplier<?> timeoutResult)
Variant ofDeferredResult(Long, Object)
that accepts a dynamic fallback value based on aSupplier
.
方法概要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 Object
getResult()
Return the result, ornull
if the result wasn't set.boolean
hasResult()
Returntrue
if the DeferredResult has been set.boolean
isSetOrExpired()
Returntrue
if this DeferredResult is no longer usable either because it was previously set or because the underlying request expired.void
onCompletion(Runnable callback)
Register code to invoke when the async request completes.void
onError(Consumer<Throwable> callback)
Register code to invoke when an error occurred during the async request.void
onTimeout(Runnable callback)
Register code to invoke when the async request times out.boolean
setErrorResult(Object result)
Set an error value for theDeferredResult
and handle it.boolean
setResult(T result)
Set the value for the DeferredResult and handle it.void
setResultHandler(DeferredResult.DeferredResultHandler resultHandler)
Provide a handler to use to handle the result value.
构造器详细资料
DeferredResult
public DeferredResult()
Create a DeferredResult.
DeferredResult
public DeferredResult(Long timeoutValue)
Create a DeferredResult with a custom timeout value.By default not set in which case the default configured in the MVC Java Config or the MVC namespace is used, or if that's not set, then the timeout depends on the default of the underlying server.
- 参数:
timeoutValue
- timeout value in milliseconds
DeferredResult
public DeferredResult(@Nullable Long timeoutValue, Object timeoutResult)
Create a DeferredResult with a timeout value and a default result to use in case of timeout.- 参数:
timeoutValue
- timeout value in milliseconds (ignored ifnull
)timeoutResult
- the result to use
DeferredResult
public DeferredResult(@Nullable Long timeoutValue, Supplier<?> timeoutResult)
Variant ofDeferredResult(Long, Object)
that accepts a dynamic fallback value based on aSupplier
.- 参数:
timeoutValue
- timeout value in milliseconds (ignored ifnull
)timeoutResult
- the result supplier to use- 从以下版本开始:
- 5.1.1
方法详细资料
isSetOrExpired
public final boolean isSetOrExpired()
Returntrue
if this DeferredResult is no longer usable either because it was previously set or because the underlying request expired.The result may have been set with a call to
setResult(Object)
, orsetErrorResult(Object)
, or as a result of a timeout, if a timeout result was provided to the constructor. The request may also expire due to a timeout or network error.
hasResult
public boolean hasResult()
Returntrue
if the DeferredResult has been set.- 从以下版本开始:
- 4.0
getResult
@Nullable public Object getResult()
Return the result, ornull
if the result wasn't set. Since the result can also benull
, it is recommended to usehasResult()
first to check if there is a result prior to calling this method.- 从以下版本开始:
- 4.0
onTimeout
public void onTimeout(Runnable callback)
Register code to invoke when the async request times out.This method is called from a container thread when an async request times out before the
DeferredResult
has been populated. It may invokesetResult
orsetErrorResult
to resume processing.
onError
public void onError(Consumer<Throwable> callback)
Register code to invoke when an error occurred during the async request.This method is called from a container thread when an error occurs while processing an async request before the
DeferredResult
has been populated. It may invokesetResult
orsetErrorResult
to resume processing.- 从以下版本开始:
- 5.0
onCompletion
public void onCompletion(Runnable callback)
Register code to invoke when the async request completes.This method is called from a container thread when an async request completed for any reason including timeout and network error. This is useful for detecting that a
DeferredResult
instance is no longer usable.
setResultHandler
public final void setResultHandler(DeferredResult.DeferredResultHandler resultHandler)
Provide a handler to use to handle the result value.- 参数:
resultHandler
- the handler- 另请参阅:
DeferredResultProcessingInterceptor
setResult
public boolean setResult(T result)
Set the value for the DeferredResult and handle it.- 参数:
result
- the value to set- 返回:
true
if the result was set and passed on for handling;false
if the result was already set or the async request expired- 另请参阅:
isSetOrExpired()
setErrorResult
public boolean setErrorResult(Object result)
Set an error value for theDeferredResult
and handle it. The value may be anException
orThrowable
in which case it will be processed as if a handler raised the exception.- 参数:
result
- the error result value- 返回:
true
if the result was set to the error value and passed on for handling;false
if the result was already set or the async request expired- 另请参阅:
isSetOrExpired()