2014-07-07 7 views
1

스프링 부트 애플리케이션이 있습니다. 이 파일을 원격 서버에 배포하고 내장 된 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 페이지를 제공, 그래서 거의 서버 측의 부하가있다. 스프링 보안 기능을 해제하려고했지만 도움이되지 않았습니다.

이것은 원격 서버에서 응용 프로그램을 실행할 때만 발생합니다. 로컬에서는 모든 것이 빠릅니다.

다른 포트에서 정적 파일을 제공하기 위해 별도로 nginx를 구성했으며 매우 신속하게 서비스를 제공하므로 서버 자체에 문제가 없습니다. 정적 파일 용으로 별도의 서버를 실행하고 싶지 않기 때문에 이것은 단지 테스트 (솔루션이 아님)였습니다.

도움 주셔서 감사합니다.

+0

는 "원격 서버"가 무엇을 의미합니까? 그것은 나를 위해 (그리고 다른 사람들을 위해) 꽤 잘 작동합니다. –

+0

해결 방법을 찾을 수 있었습니까? – cgsd

답변

1

확인할 수있는 몇 가지 정보 :

먼저 리소스를 URL에 직접 입력 해보십시오.

정적 리소스가 컨테이너의 기본 서블릿에 의해 제공되지 않도록 응용 프로그램 (http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/mvc.html#mvc-default-servlet-handler)의 기본 서블릿 처리기를 활성화하지 않았는지 확인하십시오.

기본적으로 스프링 부트는 classpath 또는 ServeltContext의 루트에서/static (또는/public 또는/resources 또는/META-INF/resources) 폴더의 정적 컨텐츠를 제공합니다. 제공된 캐시 설정으로 정적 컨텐츠 전달을 최적화하는 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/"); 
    } 

} 

상세 정보 :

+0

답장을 보내 주셔서 감사합니다. 명시 적으로 레지스트리에 추가하는 것조차 도움이되지 않았습니다. 몇 가지 호기심은 다음과 같습니다. (1) 정적 컨텐츠가 브라우저에 캐시되지 않습니다 (예 : 후속 방문시 304 대신 200 가져 오기). (2) 브라우저에서 정적 컨텐츠 (예 : js 파일)를 직접 방문하면, 초고속로드 (예 : 20ms) – user3812797

+0

1) http://docs.spring.io/spring/docs/4.0.x/javadoc-api/org/springframework/web를 설정하지 않았기 때문에 캐시 헤더가 누락되었습니다. /servlet/support/WebContentGenerator.html#setCacheSeconds-int- method (2) 50 줄의 js 파일을로드하는 데 7 초가 걸리므로 테스트하는 방법은 무엇입니까? – Ravi

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); 
} 
관련 문제