1

Springアプリケーションでの同時メソッド呼び出しを制限したい。

このためのインターセプターがあり、ここにこのインターセプターの使用例があります。しかし、問題は、メソッド(制限する必要がある)がBeanにないことです。メソッドを呼び出す必要があるたびに、新しいオブジェクトを作成しています。この場合、制限を達成する可能性はありますか?

4

1 に答える 1

2

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(){}
}
于 2012-11-22T15:05:27.273 に答える