Spring-boot – Serving Static resources from file system | Spring Boot Web

spring-bootspring-mvc

Using a Spring Boot web application I trying to serve my static resource from a file system folder outside my project.

Folder structure looks like:-

          src
             main
                 java
                 resources
             test
                 java
                 resources
          pom.xml
          ext-resources   (I want to keep my static resources here)
                 test.js

Spring Configuration:-

@SpringBootApplication
public class DemoStaticresourceApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(DemoStaticresourceApplication.class, args);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/test/**").addResourceLocations("file:///./ext-resources/")
                .setCachePeriod(0);
    }
}

Hitting 'http://localhost:9999/test/test.js' in my browser gives back a 404.

How should I configure ResourceHandlerRegistry to serve static resources from the above mentioned 'ext-resources' folder?

I should be able to switch cache on/off for dev/prod environment.

Thanks

UPDATE 1

Giving absolute file path works:-

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/test/**")
                .addResourceLocations(
                        "file:///C:/Sambhav/Installations/workspace/demo-staticresource/ext-resources/")
                .setCachePeriod(0);
}

How can I provide relative location? Absolute path will make my life tough during build & deploy process.

Best Answer

file:/// is an absolute URL pointing to the root of the filesystem and, therefore, file:///./ext-resources/ means that Spring Boot is looking for resources in a directory named ext-resources in the root.

Update your configuration to use something like file:ext-resources/ as the URL.

Related Topic