2016-04-10 12 views
2

Ich entwickle eine angularjs Anwendung mit Spring.spring web development - Caching für statischen Inhalt deaktivieren

Ich muss oft meine html/javascript Datei ändern und ich habe bemerkt, dass spring statischen Inhalt zwischenspeichert. Wie kann ich das deaktivieren?

ich dies schon versucht ...

@Configuration 
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class) 
class WebMvcConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter { 

    @Autowired 
    private Environment env; 

    @Bean 
    public ResourceUrlEncodingFilter resourceUrlEncodingFilter() { 
     return new ResourceUrlEncodingFilter(); 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     boolean devMode = this.env.acceptsProfiles("dev"); 
     //boolean useResourceCache = !devMode; 
     boolean useResourceCache = false; 
     Integer cachePeriod = devMode ? 0 : null; 

     registry.addResourceHandler("/public/**") 
       .addResourceLocations("/public/", "classpath:/public/") 
       .setCachePeriod(cachePeriod) 
       .resourceChain(useResourceCache) 
       .addResolver(new GzipResourceResolver()) 
       .addResolver(new VersionResourceResolver().addContentVersionStrategy("/**")) 
       .addTransformer(new AppCacheManifestTransformer()); 
    } 

} 

und ...

WebContentInterceptor webContentInterceptor; 
public @Bean WebContentInterceptor webContentInterceptor() { 
    if (this.webContentInterceptor == null) { 
     this.webContentInterceptor = new WebContentInterceptor(); 

     this.webContentInterceptor.setAlwaysUseFullPath (true); 
     this.webContentInterceptor.setCacheSeconds (0); 


     this.webContentInterceptor.setCacheMappings (new Properties() { 
      private static final long serialVersionUID = 1L; 

      { 
       put ("/styles/**", "0"); 
       put ("/scripts/**", "0"); 
       put ("/images/**", "0"); 
       put ("/js/**", "0"); 
      } 
     }); 
    } 

    return this.webContentInterceptor; 
} 

das ist mein build.gradle Datei

group 'xyz' 
version '1.0-SNAPSHOT' 
buildscript{ 
    repositories{ 
     mavenCentral() 
    } 
    dependencies{ 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.2.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
    maven { url "https://repository.jboss.org/nexus/content/repositories/releases" } 
} 

dependencies { 
    compile 'org.springframework.boot:spring-boot-starter-web' 
    compile 'org.springframework.security:spring-security-web:4.0.3.RELEASE' 
    compile 'net.sf.dozer:dozer:5.4.0' 

    compile 'org.springframework.boot:spring-boot-starter-data-jpa' 
    compile 'com.h2database:h2'// For Testing purpose 
    compile 'com.google.guava:guava:19.0' // google library for data collections 

    testCompile("junit:junit") 
    //testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

task wrapper(type: Wrapper){ 
    gradleVersion = '2.3' 
} 

configurations.all { 
    // https://stackoverflow.com/questions/14024756/slf4j-class-path-contains-multiple-slf4j-bindings/25694764#25694764 
    exclude module: 'slf4j-log4j12' 
} 

Antwort

0

Es war ein dummer Fehler. Ich habe die HTML/CSS/JS-Quelldateien bearbeitet, aber die kompilierte und implementierte Version war von dieser Änderung nicht betroffen.

3

Gerade diese Konfigurationsoption setzen in Ihre application.properties:

spring.resources.chain.cache=false # Disable caching in the Resource chain. 

Sie können auch weitere feinkörnige Konfigurationsoptionen im Zusammenhang mit Static content served by Spring Boot ansehen (scrollen Sie nach Abschnitt # SPRING RESOURCES HANDLING).

Darüber hinaus können statische Ressourcen zwischengespeichert werden, die nicht von Spring Boot und seinem Container (z. B. Webbrowser) verarbeitet werden. Wenn Sie diese Art des Caching umgehen möchten, gibt es die Möglichkeit, die Technik cache busting zu verwenden. Lesen Sie this section of Spring Boot docs, um mehr Informationen darüber zu erhalten.

+0

es funktioniert irgendwie nicht für mich. Ich habe auch 'Spring-Boot-Devtools' aktiviert, aber es hat mir nicht geholfen. Ich verwende Chrome im Inkognito-Modus und alles ist localhost, also sollte es kein Infrastrukturproblem sein. Aber es ist interessant zu wissen, dass auf meinem Mac der Cache nach jedem Neustart des Servers aktualisiert wird, aber auf meinem Windows-Rechner zwischengespeichert wird. 24 Stunden. ... dieselbe Anwendung – robie2011

Verwandte Themen