项目部署在was中部署了两个web应用,昨晚出现了Was已启动web应用但是端口未监听的情况。
问题原理
是在Struts2框架中,Filter(如StrutsPrepareAndExecuteFilter)在应用启动时初始化,并在有流量进入时开始工作。当有流量请求到达时,Filter会拦截这些请求,并根据配置决定如何处理,比如转发到相应的Action。这意味着,只有当有流量进来时,Filter才会真正“唤醒”并开始处理请求,从而激活相关端口的活动。
解决方案
这是 IBM WebSphere Application Server 的一个配置界面,具体是在应用程序服务器 abt_server02 的 Web 容器中设置一个自定义属性。
这个自定义属性是:
• 名称: com.ibm.ws.webcontainer.invokeFilterInitAtStartup
• 值: true
参数解释
• com.ibm.ws.webcontainer.invokeFilterInitAtStartup
• 值: true
• 解释: 这个配置项控制过滤器(Filter)是否在 Web 应用程序启动时初始化。当设置为 true 时,意味着所有过滤器将在 Web 应用程序启动时立即初始化,而不是等到它们第一次被请求时才初始化。这可以提高应用程序的启动时间,但可能会增加启动时的资源消耗。
配置影响
• 性能影响: 设置为 true 可以减少首次请求时的延迟,因为过滤器已经在启动时初始化了。然而,这也意味着每次应用程序启动时,所有过滤器都会被初始化,可能会增加启动时间和资源消耗。
• 资源管理: 如果应用程序包含许多过滤器,或者过滤器初始化过程复杂,设置为 true 可能会对服务器的启动性能产生显著影响。
使用场景
• 适用于: 当需要确保所有过滤器在应用程序启动时已经准备好,以避免首次请求时的延迟时。
• 不适用于: 当希望减少应用程序启动时间和资源消耗,或者过滤器初始化过程非常耗时时。
总的来说,这个配置项是一个权衡启动时间和运行时性能的选项,具体设置应根据应用程序的需求和环境来决定。