我有一个JEE7 web应用程序,它使用jax-ws注释来定义一些服务,并使用spring框架。根据请求到达时为线程分配一个名称
我希望在请求到达时为请求提供服务的线程分配一个选项名称。
我想过把Thread.currentThread().setName(“”),这工作得很好,如果我把这一行放在每个@path注释的方法中,但在每个方法中添加相同的代码是没有意义的。我正在考虑把它放在早期阶段。
是否有某种“@onrequest”注释来定义一些通用于所有请求的代码?
在此先感谢。
我有一个JEE7 web应用程序,它使用jax-ws注释来定义一些服务,并使用spring框架。根据请求到达时为线程分配一个名称
我希望在请求到达时为请求提供服务的线程分配一个选项名称。
我想过把Thread.currentThread().setName(“”),这工作得很好,如果我把这一行放在每个@path注释的方法中,但在每个方法中添加相同的代码是没有意义的。我正在考虑把它放在早期阶段。
是否有某种“@onrequest”注释来定义一些通用于所有请求的代码?
在此先感谢。
我得到这个工作与过滤器。我只是在web.xml中声明了一个新的过滤器,然后我实现了过滤器类。
在web.xml:
<filter>
<filter-name>threadRenamingFilter</filter-name>
<filter-class>RestRequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>threadRenamingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在过滤器类:
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class RestRequestFilter implements Filter {
private final Log log = LogFactory.getLog(this.getClass());
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
//Before request execution
Date now = new Date();
Long startTime = now.getTime();
String newName = startTime.toString();
log.trace("Thread " + newName + " started at: " + now.toString());
//renaming of the thread with the time of spawn
Thread.currentThread().setName(newName);
//Request execution
arg2.doFilter(arg0, arg1);
//After request execution
now = new Date();
Long endTime = now.getTime();
Long executionTime = endTime - startTime;
log.trace("Thread " + newName + " end at: " + now.toString());
log.debug("Thread " + newName + " completed in: " + executionTime + "ms");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
可以使用拦截器来处理,基本上你需要写一个实现类: http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html
,并将其连接弹簧。然后在postHandle或preHandle方法中,你可以做你想做的事情; )
下面是一些教程如何做到这一点: http://viralpatel.net/blogs/spring-mvc-interceptor-example/
你也可以看一看过滤器。
我只是在想这个问题。我一定会试着让你知道。非常感谢。 – fnqlo
我试图将该拦截器添加到cxf servlet中,但它不起作用。我需要一些cxf。 – fnqlo
然后可能过滤器会在你的代码有帮助之前运行? – freakman