Java 如果servlet上下文初始化失败,请跳过部署或停止web应用程序

Java 如果servlet上下文初始化失败,请跳过部署或停止web应用程序,java,servlets,web-applications,websphere,Java,Servlets,Web Applications,Websphere,在我们的项目中,我们有几个基于Spring的模块,它们作为web应用程序部署在WAS上。我们需要跳过部署,或者在Spring上下文初始化失败时停止模块(即ContextLoaderListener#contextInitialized或DispatcherServlet#init引发异常)。现在,如果发生这种情况,应用程序将被部署并启动,但对任何请求都返回HTTP500 Websphere 8.5.5 相关问题:您可以使用jenkins+maven。 添加需要在测试下检查的部分,如junit。

在我们的项目中,我们有几个基于Spring的模块,它们作为web应用程序部署在WAS上。我们需要跳过部署,或者在Spring上下文初始化失败时停止模块(即
ContextLoaderListener#contextInitialized
DispatcherServlet#init
引发异常)。现在,如果发生这种情况,应用程序将被部署并启动,但对任何请求都返回HTTP500

Websphere 8.5.5


相关问题:

您可以使用jenkins+maven。 添加需要在测试下检查的部分,如junit。 若这个模块并没有通过测试,jenkins将不会部署它


但我更喜欢在部署前修复bug

这个APAR似乎是相关的:

从APAR文本中:

Listener exceptions typically should not stop the application
from starting up for service. However, some applications depend
on their listeners to do the necessary setup before the
application is started for service. Such applications prefer to
stop the application from starting up when there is any
exception in their listeners.
问题结论

The WebContainer Container code was modified to provide an
option to stop the application when there is any listener
exception during the application starting up process.

A new WebContainer custom property needs to be set to enable the
behavior provided by this APAR:

For Full Profiles

com.ibm.ws.webcontainer.stopappstartuponlistenerexception = true
(default is false)

For Liberty Profile

stopappstartuponlistenerexception=true

The fix for this APAR is currently targeted for inclusion in
WebSphere Application Server fix packs 8.5.5.11 and  9.0.0.2,
and Liberty 16.0.0.3
有关更多信息,请参阅APAR链接。

也有类似问题。 事情是-网络恐惧-抱歉无法抗拒;-)不会在启动时初始化所有内容

为了触发受控请求,我在应用程序的启动中添加了ScheduleEJB。此bean本身触发了对已定义URL的http请求,该请求本身触发:

  • 链中要初始化的任何筛选器
  • 初始化所需的任何上下文
这本身就确保了我的应用程序(EAR或WAR)在部署后很快得到测试。这在每分钟少量请求的情况下运行良好

如果您在高负载下工作,即每秒有大量请求,则需要选择不同的方法。 在本例中,我在应用程序的@Startup中添加了一个轮询机制,它每秒钟或250ms轮询一次(取决于应用程序的负载)。 这种对服务器的触发确保了@startupbean是第一个触发应用程序中可能的init问题的。如果发生这种情况,我初始化了一个过滤器,它总是向请求者报告500(或更好的拟合错误)

当然,一旦你得到500,就停止解雇bean,否则你的管理员可能会杀了你。(发生在我身上,因为我生产了吨或监控问题;-))
当然,在常规操作中,在应用程序正确启动后,您还应该禁用轮询功能,在应用程序代码的顶层查找一个try-catch,它捕获Spring异常并允许应用程序继续运行


据我所知,如果允许抛出的Spring异常传播到堆栈的顶部,JVM将停止,并且无法继续运行

问题与部署初始化依赖于我们在测试阶段无法访问的外部模块的情况有关。如果检测到应用程序未正确初始化,如何停止该应用程序?有Websphere的可用解决方案吗?@Alexalauyou您是如何为Websphere(EAR,WAR)打包应用程序的?需要检查我的精确解,它已经是几年前的事了。与此同时,我更喜欢使用像wildfly这样的开源容器——当然,如果客户端允许的话。xml配置的Spring应用程序打包为war,因此您无法从应用程序的“内部”控制应用程序的取消部署。每个容器都有不同的启动/停止方式。你能解释一下为什么停止申请很重要吗?它是web应用程序、web服务还是桌面应用程序的后端?请注意,此解决方案取决于您的管理员配置。如果他们错过了,你就有一个不正常的应用程序。在具有高度分布式管理团队的大型企业中,这可能是一个问题。