我有一个实现ServletContextListener的类,它在启动时加载一些资源。这些资源对于应用程序来说是至关重要的,当我的逻辑中发生一些错误事件时,我希望整个启动失败。有没有什么命令可以从ServletContextListener.contextInitialized()方法内部执行,以停止并使整个Tomcat启动失败?
ServletContextListener
ServletContextListener.contextInitialized()
s8vozzvw1#
尝试指定:
-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE=true
字符串在您的java运行时选项中,引用official documentation:如果为true,则如果在服务器初始化阶段发生异常,服务器将退出。如果未指定,则将使用默认值false。最新消息:如果你想通过代码来实现这一点,System.exit()可以吗?
java
System.exit()
public class FailFastListener implements ServletContextListener { private static final Logger log = LoggerFactory.getLogger(FailFastListener.class); @Override public void contextInitialized(ServletContextEvent servletContextEvent) { try { //initialization } catch(Exception e) { log.error("Sooo bad, shutting down", e); System.exit(1); } } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } }
型你可以使用decorator模式来 Package 现有的侦听器,而不会使它们变得混乱。
kse8i1jr2#
如果你想停止Tomcat,因为你的webapp部署失败,我假设你没有其他的app部署到tomcat。在这种情况下,为什么你不把这个app构建成一个嵌入了Tomcat/Jetty的独立webapp呢?这样,只要你的webapp不能正常启动,嵌入的服务器也会关闭。对我来说,看起来你专注于ServletContextListener是为了解决一个问题,而这个问题并不是ServletContextListener的目的。不要使用System.exit(),因为它会杀死可能正在运行其他部署的应用程序的服务器。如果因为你知道永远不会有其他应用程序(而且你不想)而没有问题,那么就创建一个独立的Web应用程序。这种糟糕的做法在CWE中被列为潜在的弱点:CWE-382只是一个提示:Sping Boot 有助于构建带有嵌入式服务器的独立Web应用程序。请参阅此指南:https://spring.io/guides/gs/spring-boot/很好的文章解释了为什么这可能是你正在寻找的:http://www.beyondjava.net/blog/application-servers-sort-of-dead/
2条答案
按热度按时间s8vozzvw1#
尝试指定:
字符串
在您的
java
运行时选项中,引用official documentation:如果为true,则如果在服务器初始化阶段发生异常,服务器将退出。
如果未指定,则将使用默认值false。
最新消息:
如果你想通过代码来实现这一点,
System.exit()
可以吗?型
你可以使用decorator模式来 Package 现有的侦听器,而不会使它们变得混乱。
kse8i1jr2#
如果你想停止Tomcat,因为你的webapp部署失败,我假设你没有其他的app部署到tomcat。在这种情况下,为什么你不把这个app构建成一个嵌入了Tomcat/Jetty的独立webapp呢?这样,只要你的webapp不能正常启动,嵌入的服务器也会关闭。
对我来说,看起来你专注于
ServletContextListener
是为了解决一个问题,而这个问题并不是ServletContextListener
的目的。不要使用
System.exit()
,因为它会杀死可能正在运行其他部署的应用程序的服务器。如果因为你知道永远不会有其他应用程序(而且你不想)而没有问题,那么就创建一个独立的Web应用程序。这种糟糕的做法在CWE中被列为潜在的弱点:CWE-382只是一个提示:Sping Boot 有助于构建带有嵌入式服务器的独立Web应用程序。请参阅此指南:https://spring.io/guides/gs/spring-boot/
很好的文章解释了为什么这可能是你正在寻找的:http://www.beyondjava.net/blog/application-servers-sort-of-dead/