Spring Boot Embedded Tomcat JSPServlet 选项

SpringBoot Embedded Tomcat JSPServlet Options

设置 JSPServlet 的配置选项(如 checkInterval、keepgenerated、modificationTestInterval 等)的首选方法是什么?我试图更改它的原因是 JSP 编译存在一些奇怪的问题。我们正在使用可执行文件 war 打包并将 'server.tomcat.basedir' 属性 设置为指向本地可访问的文件夹。生成的 jsp java 源文件和 class 文件显示修改日期为 1970 年 1 月 14 日。在 windows 资源管理器中,修改仅显示为空。在 linux,我们对所有文件进行了触摸。但是,一旦再次访问 jsp 文件,修改日期就会回到 1970 年。我们怀疑这是导致每次访问 jsp 文件都要编译,从而减慢速度。然而,重新编译似乎只发生在 linux 环境中。有没有人遇到过这个问题?我们的环境:Spring Boot 1.2.2.BUILD-SNAPSHOT,Tomcat 8,JDK 1.8_025。

您可以使用 EmbeddedServletContainerCustomizer @Bean 查找 JSP servlet 并配置其初始化参数。例如,在您的主要 @Configuration class:

@Bean
public EmbeddedServletContainerCustomizer customizer() {
    return new EmbeddedServletContainerCustomizer() {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof TomcatEmbeddedServletContainerFactory) {
                customizeTomcat((TomcatEmbeddedServletContainerFactory) container);
            }
        }

        private void customizeTomcat(TomcatEmbeddedServletContainerFactory tomcat) {
            tomcat.addContextCustomizers(new TomcatContextCustomizer() {

                @Override
                public void customize(Context context) {
                    Wrapper jsp = (Wrapper) context.findChild("jsp");
                    jsp.addInitParameter("modificationTestInterval", "10");
                }
            });
        }
    };
}

或者您可以按照此处所述将参数添加到 application.properties 文件中: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html 寻找:
server.jsp-servlet.init-parameters.*= # 用于配置 JSP servlet

的初始化参数

例如:

server.jsp-servlet.init-parameters.modificationTestInterval=10