Spring-WebFlow 是否提供了一种了解当前正在执行的流数量的方法?
我可以使用全局 bean 来解决它,但也许 WebFlow 提供了一个开箱即用的解决方案。
编辑:根据要求,这里是基于FlowExecutionListenerAdapter的所谓“全局 Bean”解决方案
package your.package;
import org.apache.log4j.Logger;
import org.springframework.webflow.core.collection.AttributeMap;
import org.springframework.webflow.definition.StateDefinition;
import org.springframework.webflow.definition.TransitionDefinition;
import org.springframework.webflow.execution.FlowExecutionListenerAdapter;
import org.springframework.webflow.execution.FlowSession;
import org.springframework.webflow.execution.RequestContext;
public class FlowExecutionListener extends FlowExecutionListenerAdapter {
private static Logger logger = Logger.getLogger(FlowExecutionListener.class);
private int sessionCount = 0;
@Override
public void sessionStarted(final RequestContext context, final FlowSession session) {
super.sessionStarted(context, session);
sessionCount++;
logger.debug("sessionStarted, state: " + session.getState().getId() + ", count: " + sessionCount);
}
@Override
public void sessionEnded(final RequestContext context, final FlowSession session, final String outcome, final AttributeMap output) {
super.sessionEnded(context, session, outcome, output);
sessionCount--;
logger.debug("sessionEnded, state: " + session.getState().getId() + ", count: " + sessionCount);
}
}
bean 必须在 Spring 级别注册:
<bean id="flowExecutionListener" class="your.package.FlowExecutionListener" />
编辑2:
如果您的应用程序中有多个 WebFlow,这将计算所有活动流。如果您想单独计算它们,您可以使用session.getDefinition().getId()获取流的 ID 。