命名Tomcat工作线程

时间:2012-12-27 16:55:53

标签: java multithreading tomcat monitoring

是否有一种简单的方法可以更改Tomcat为其工作线程提供的默认名称?理想情况下,我希望与某个Web应用程序关联的所有线程都在其名称中包含它,可能作为前缀。例如,如果我部署app1.war和app2.war,我希望app1的所有主题都在其名称中包含 app1

2 个答案:

答案 0 :(得分:2)

a forum开始,在这里重新发布了更好的格式;一个简单的filter,它将每个线程重命名为请求URI,在本例中为:

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); 
        } 
    } 
} 

答案 1 :(得分:0)

线程只与某个特定的webapp临时“关联”。

我无法想象为什么这会是有用的东西:

  • 日志记录应包含上下文信息(例如,正在记录的组件)
  • 分析可以轻松揭示正在执行的代码(从而显示“正在运行”的webapp)
  • 例外包括完整的堆栈跟踪,可以显示正在执行的代码(从而显示“正在运行”的webapp)
  • 可以通过线程转储检查长时间运行的线程(从而显示在长时间运行的请求中“正在运行”的webapp)