我想在spring应用程序中限制并发方法调用。
有interceptor这个和here使用这个拦截器的例子。 但问题是方法(需要限制)不在bean中,我每次需要调用方法时都会创建新对象。 在这种情况下是否有可能实现限制?
答案 0 :(得分:2)
您可以使用Load-time weaving with AspectJ并编写一个自定义aspect
进行限制。
实施例
@Aspect
public class ThrottlingAspect {
private static final int MAX_CONCURRENT_INVOCATIONS = 20;
private final Semaphore throttle = new Semaphore (MAX_CONCURRENT_INVOCATIONS, true);
@Around("methodsToBeThrottled()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
throttle.acquire ();
try {
return pjp.proceed ();
}
finally {
throttle.release ();
}
}
@Pointcut("execution(public * foo..*.*(..))")
public void methodsToBeThrottled(){}
}