Java 命名Tomcat工作线程
有没有一种简单的方法可以更改Tomcat为其工作线程提供的默认名称?理想情况下,我希望与某个web应用程序相关联的所有线程都以其名称命名,可能作为前缀。例如,如果我部署app1.war和app2.war,我希望app1的所有线程的名称中都有app1;一个简单的方法,将每个线程重命名为请求URI,在本例中:Java 命名Tomcat工作线程,java,multithreading,tomcat,monitoring,Java,Multithreading,Tomcat,Monitoring,有没有一种简单的方法可以更改Tomcat为其工作线程提供的默认名称?理想情况下,我希望与某个web应用程序相关联的所有线程都以其名称命名,可能作为前缀。例如,如果我部署app1.war和app2.war,我希望app1的所有线程的名称中都有app1;一个简单的方法,将每个线程重命名为请求URI,在本例中: public class ThreadNameFilter implements javax.servlet.Filter { public void doFilter(Servl
public class ThreadNameFilter implements javax.servlet.Filter {
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain fc) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest)req;
final Thread curThr = Thread.currentThread();
final String oldName = curThr.getName();
// change the name of the current thread to something related
// to the application (e.g. URI)
try {
curThr.setName(httpReq.getRequestURI());
fc.doFilter(req, resp);
} finally {
curThr.setName(oldName);
}
}
}
线程只与特定的webapp临时“关联” 我无法想象为什么这会是一件有用的事情:
- 日志记录应包括上下文信息(例如,日志记录的组件)
- 分析可以很容易地显示正在执行的代码(从而显示正在“运行”的webapp)
- 异常包括完整堆栈跟踪,可以显示正在执行的代码(从而显示“正在运行”的webapp)
- 可以通过线程转储检查长时间运行的线程(从而显示长时间运行请求中“正在运行”的webapp)