Springアプリケーションでの同時メソッド呼び出しを制限したい。
このためのインターセプターがあり、ここにこのインターセプターの使用例があります。しかし、問題は、メソッド(制限する必要がある)がBeanにないことです。メソッドを呼び出す必要があるたびに、新しいオブジェクトを作成しています。この場合、制限を達成する可能性はありますか?
Springアプリケーションでの同時メソッド呼び出しを制限したい。
このためのインターセプターがあり、ここにこのインターセプターの使用例があります。しかし、問題は、メソッド(制限する必要がある)がBeanにないことです。メソッドを呼び出す必要があるたびに、新しいオブジェクトを作成しています。この場合、制限を達成する可能性はありますか?
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(){}
}