【问题标题】:Servlet Filters and Threading?Servlet 过滤器和线程?
【发布时间】:2010-10-15 17:29:37
【问题描述】:

我正在 Weblogic 10.3.3 上构建 Web 服务,并且正在使用 servlet 过滤器将请求记录到数据库。我不希望过滤器减慢对 web 服务的调用。所以我实际上有两个问题。

1) 过滤器,或者我可以让过滤器在单独的线程上进行日志记录吗?如果有怎么办?

2) 有没有一种方法可以动态打开或关闭过滤器,而无需重新部署代码。

谢谢

【问题讨论】:

    标签: java servlets weblogic weblogic-10.x servlet-filters


    【解决方案1】:
    1. 过滤器由分配给您的请求的线程执行。如果您愿意,您可以创建一个 FutureTask 来进行日志记录,但是过滤器中没有内置任何东西可以让您做这样的事情。如果您使用的是 Log4J,则可以登录到队列并以这种方式卸载您的应用。
    2. 过滤器是在 web.xml 中添加的,因此您不能关闭它们或以这种方式关闭它们。如果里面有一个 JMX bean 可以完成这项工作,也许您可​​以使用 JMX 控制台来关闭和打开它的功能。

    您可能在这里犯了过早的优化。如果您记录或过滤内容将成为问题,我会等到有证据证明这一点,然后再开始重新设计以修复它。

    【讨论】:

    • 确实,个人资料第一!例如,瓶颈实际上可能是一个未池化的数据库连接。至于第 2 点,另一个选项是运行时检查类路径中的属性文件。但这也可能会减慢速度。基本上每一行代码也是如此。
    【解决方案2】:

    很多日志软件都支持“异步日志”,其中一个日志事件非常迅速地放入队列中,然后一个单独的线程尽快将它们写入持久存储。这里的缺点是,如果您的应用程序在事件仍在队列中时崩溃,您更有可能丢失消息。总体开销也略高,因为您有多个线程相互协调。

    此外,许多日志框架都有一个“监视配置”选项,可以定期检查配置文件。这允许您在“热”系统上启用或禁用记录器。

    您使用的是什么日志库?

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2015-05-15
      • 2013-05-05
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      相关资源
      最近更新 更多