J'apprends webflux et je voudrais savoir comment diffuser du contenu statique sur un MicroService en utilisant webflux mais je n'ai pas trouvé d'informations pour le faire.
Essaye ça
RouterFunction router = resources("/**", new ClassPathResource("public/"));
PDATE: N'oubliez pas de spécifier un nom du fichier statique dans l'URL lorsque vous y accédez de l'extérieur, comme localhost:8080/index.html
Juan Medina a raison. Je veux juste le rendre encore plus clair et fournir un lien de référence .
En fait, il vous suffit d'ajouter un bean RouterFunction pour gérer les ressources statiques. Vous n'avez pas à implémenter votre propre RouterFunction car RouterFunctions.resources("/**", new ClassPathResource("static/"));
donne ce que vous voulez.
Tout ce que je fais, c'est d'ajouter ce morceau de code:
@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}
Quelles que soient les requêtes non reconnues, elles tomberont dans le routeur statique.
mettre des ressources Web statiques publiques dans le public-web-resources
dossier:
./src/main/public-web-resources
configurer Spring Boot 2.0 , application.yaml
:
spring.main.web-application-type: "REACTIVE"
spring.webflux.static-path-pattern: "/app/**"
spring.resources.static-locations:
- "classpath:/public-web-resources/"
configurer maven-resources-plugin , pom.xml
:
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/public-web-resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${basedir}/target/classes/public-web-resources</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</plugin>
</plugins>
</build>
Merci wildloop a fonctionné pour moi avec les propriétés suivantes:
spring.webflux.static-path-pattern: "/**"
spring.resources.static-locations: "classpath:/public-web-resources/"
Spring Boot ajoute la ligne de journal suivante:
15:51:43.776 INFO Adding welcome page: class path resource [public-web-resources/index.html] - WebMvcAutoConfiguration$WelcomePageHandlerMapping.<init>
Et cela fonctionne comme une page d'accueil pour http: // localhost: port/myapp /
Je souhaite qu'il y ait un moyen de l'invoquer sur /myapp/docs
J'ai eu du mal à héberger du contenu statique en dehors du .jar
exécutable. Avec Spring Boot MVC, vous pouvez simplement créer un répertoire public
à côté du .jar
et il servira les fichiers pour vous. Avec Spring Webflux, ce n'est pas le cas. Les solutions mentionnées ici ne fonctionnent que si vous placez les fichiers statiques dans le resources/public
dossier, puis créez le .jar
.
J'ai eu webflux de printemps pour servir du contenu statique sans l'inclure dans le pot avec la configuration suivante:
spring:
application:
name: spring-cloud-gateway
webflux.static-path-pattern: "/**"
resources.static-locations: "file:public/"
Avec cela, vous pouvez créer le webflux jar
et ajouter les fichiers statiques plus tard lors du déploiement.