在新线程中调用连接点时,Spring方面失败

原学程将引见在新线程中挪用衔接面时,Spring圆里掉败的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

在新线程中调用连接点时,Spring方面失败 教程 第1张

成绩描写

我正在应用戴有围绕圆里的Spring 三.0.五。

@Above圆里不妨完善天任务。AOP表白式以1串Bean的交心为目的。

圆里在挪用先后履行1些逻辑:

 @Around(...)
 public Object monitor(ProceedingJoinPoint pjp) throws Throwable {
// some code
Obj o =  pjp.proceed();
// some code
 }

出甚么年夜没有了的。

如今,我正在测验考试创立另外一个圆里,假如截与的办法消费的时光太长,该圆里会扔出异常。

private static ExecutorService executor = Executors.newCachedThreadPool();

@Around(...)
public Object monitor(ProceedingJoinPoint pjp) throws Throwable {

Object obj = null;

Callable<Object> task = new Callable<Object>() {
 public Object call() {
  return pjp.proceed();
 }
};
Future<Object> future = executor.submit(task);
try {
 obj = future.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException ex) {
 ...
} catch (InterruptedException e) {
 // we ignore this one...
} catch (ExecutionException e) {
 throw e.getCause(); // rethrow any exception raised by the invoked method
} finally {
 future.cancel(true); // may or may not desire this
}

return obj;
}

在仅运用此圆里的情形下履行代码时,我获得以下异常:

java.lang.RUNTIME异常:java.lang.IlLegalStateException:可
找到办法挪用:检讨AOP挪用能否正在停止,
而且ExposeInvocationInterceptor位于拦阻器链中。

从Spring documentation我读到:

"类ExposeInvocationInterceptor

将以后办法挪用地下为线程当地对于象的侦听器。"

所以瞅起去目的丧失了,由于我根本上开动了1个新线程,而新线程出有拜访当地线程的权力。能否有处理此成绩的办法或者更佳的办法?

感谢

推举谜底

处理计划异常简略。检讨办法消费多长时光的圆里必需是圆里"链"中的最初1个圆里。我在圆里上应用了@Order正文,使其成为最初1个要履行的圆里。

胜利了。

假如圆里没有是最初履行的,则新线程没法拜访包括ExposeInvocationInterceptor类的ThreadLocal变质。

佳了闭于在新线程中挪用衔接面时,Spring圆里掉败的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。