【问题标题】:How to set Tomcat's "reloadable" flag in a Spring Boot application?如何在 Spring Boot 应用程序中设置 Tomcat 的“可重新加载”标志?
【发布时间】:2017-12-01 23:27:57
【问题描述】:

我正在 Spring Boot 中开发一个 Web 应用程序,并将其部署在 Windows 上运行的 Tomcat 8.5 上。我面临的问题是,由于 Catalina 检查应用程序是否需要重新加载,Tomcat 会定期产生非常高的 CPU 负载。根据Tomcat 8 documentation,有一个reloadable 标志可以设置为false,以便应用程序禁用此行为。这是文档所说的(重点是我的):

如果您希望 Catalina 监控类,请设置为 true /WEB-INF/classes/ 和 /WEB-INF/lib 用于更改,并自动 如果检测到更改,则重新加载 Web 应用程序。这个功能是 在应用程序开发过程中非常有用,但它需要 显着的运行时开销,不推荐用于 部署的生产应用程序。您可以使用管理器网络 然而,应用程序触发重新加载已部署的应用程序 需求。

注意 - 此属性的值将继承自 您在周围的 Context 组件上设置的可重新加载属性,以及 您在此处明确设置的任何值都将被替换。

问题是:如何在 Spring Boot 中将这个特定的 reloadable 标志设置为 false?最好不要使用手动创建的META-INF/context.xml,而是使用注释进行配置。

【问题讨论】:

    标签: java spring tomcat spring-boot configuration


    【解决方案1】:

    您应该能够通过创建EmbeddedServletContainerCustomizer 来实现此目的

    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return new EmbeddedServletContainerCustomizer() {
            @Override
            public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
                if (configurableEmbeddedServletContainer instanceof TomcatEmbeddedServletContainerFactory) {
                    ((TomcatEmbeddedServletContainerFactory) configurableEmbeddedServletContainer).addContextCustomizers(
                            new TomcatContextCustomizer() {
                                @Override
                                public void customize(Context context) {
                                    context.setReloadable(false);
                                }
                            }
                    );
                }
            }
        };
    }
    

    【讨论】:

    • 谢谢!我有点担心“嵌入式”部分。即使在常规 Tomcat 上运行,这也能工作吗?
    • 不,这不适用于 Spring Boot 所称的传统部署。如果您正在创建一个纯非可执行 WAR 包,则必须通过 META-INF/context.xml 文件以老式方式“自定义”上下文。
    • 我明白了。感谢您的澄清!那么我会坚持context.xml
    猜你喜欢
    • 2016-08-10
    • 2018-09-08
    • 2017-07-04
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多