我有一个春季启动应用程序。当我将其部署到远程服务器并使用嵌入式tomcat运行时,我的静态文件加载速度非常慢。例如,加载50行js文件大约需要7秒钟。它是一个非常标准的Spring MVC应用程序。我的主要看起来像这样
package com.mineiq;
import javax.servlet.MultipartConfigElement;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.embedded.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("128MB");
factory.setMaxRequestSize("128MB");
return factory.createMultipartConfig();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
例如,我的主页只是提供静态html页面,因此几乎没有服务器端负载。我试过禁用spring-security,但它没有帮助。
仅当我在远程服务器上运行应用程序时才会发生这种情况。在当地,一切都很快。
我单独配置nginx以在不同的端口上提供静态文件,并且它很快就能为它们服务,所以问题不在于服务器本身。这只是一个测试(不是解决方案),因为我真的不想为静态文件运行单独的服务器。
感谢您的帮助。
答案 0 :(得分:1)
您可以查看的一些提示:
首先尝试直接在网址中点击资源。
确保您没有在应用程序(http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/mvc.html#mvc-default-servlet-handler)中启用默认的servlet处理程序,以便容器的默认Servlet不提供静态资源。
默认情况下,Spring Boot将从类路径中的/ static(或/ public或/ resources或/ META-INF / resources)文件夹或ServeltContext的根目录中提供静态内容。它使用ResourceHttpRequestHandler,通过提供的缓存设置优化静态内容交付。
如果您想为静态内容添加除上述默认内容之外的其他位置,您可以通过添加自己的WebMvcConfigurerAdapter并覆盖addResourceHandlers方法来实现,如下所示:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.examples.mvc.base.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");
}
}
更多信息:
答案 1 :(得分:0)
您应该允许浏览器缓存静态资源,方法是使用setCachePeriod()
设置缓存周期,请看以下示例:
@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan(basePackages = "your.site")
public class ConfigWebMvc extends WebMvcConfigurerAdapter implements WebApplicationInitializer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
}