web-dev-qa-db-fra.com

Servir des ressources statiques à partir du système de fichiers | Web de démarrage du printemps

Utilisation d'une application Web Spring Boot J'essaie de servir ma ressource statique à partir d'un dossier du système de fichiers situé en dehors de mon projet.

La structure des dossiers ressemble à: -

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

Configuration du printemps: -

@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);
    }
}

Frapper ' http: // localhost: 9999/test/test.js ' dans mon navigateur rend 404.

Comment dois-je configurer ResourceHandlerRegistry pour servir des ressources statiques à partir du dossier 'ext-resources' mentionné ci-dessus?

Je devrais pouvoir activer/désactiver le cache pour l’environnement dev/prod.

Merci

UPDATE 1

Donner le chemin de fichier absolu fonctionne: -

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

Comment puis-je fournir un emplacement relatif? Un chemin absolu me rendra la vie difficile pendant le processus de construction et de déploiement.

15
Kumar Sambhav

file:/// est une URL absolue pointant vers la racine du système de fichiers et, par conséquent, file:///./ext-resources/ signifie que Spring Boot recherche des ressources dans un répertoire nommé ext-resources à la racine.

Mettez à jour votre configuration pour utiliser quelque chose comme file:ext-resources/ en tant qu'URL.

24
Andy Wilkinson

Spring Boot Maven Plugin peut ajouter des répertoires supplémentaires au classpath. Dans votre cas, vous pourriez inclure cela dans votre pom.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring.boot.version}</version>
    <configuration>
        <folders>
            <folder>${project.build.directory}/../ext-resources</folder>
        </folders>

        ...
    </configuration>
</plugin>

Ainsi, vous n'avez pas besoin d'inclure aucun code matériel dans vos classes. Il suffit de démarrer votre application Web avec

mvn spring-boot:run
1
Alfredo Diaz

Voici ce que j'ai fait dans la classe WebConfig, à l'intérieur de la méthode addResourceHandlers:

boolean devMode = this.env.acceptsProfiles("development");
String location;
if (devMode) {
    String currentPath = new File(".").getAbsolutePath();
    location = "file:///" + currentPath + "/client/src/";
} else {
    location = "classpath:static/";
}
1
virgium03