我有一個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