0

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

4

2 回答 2

2

来自论坛,以更好的格式重新发布在这里;一个简单的过滤器,将每个线程重命名为请求 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); 
        } 
    } 
} 
于 2012-12-27T16:59:44.700 回答
0

线程只是暂时与特定的 web 应用程序“关联”。

我无法想象为什么这会很有用:

  • 记录应该包括上下文信息(例如,什么组件正在记录)
  • 分析可以很容易地揭示正在执行的代码(从而揭示正在“运行”的 webapp)
  • 异常包括完整的堆栈跟踪,可以揭示正在执行的代码(从而揭示正在“运行”的 webapp)
  • 可以通过线程转储检查长时间运行的线程(从而揭示在长时间运行的请求中“运行”的 webapp)
于 2012-12-27T21:39:10.903 回答