我正在学习webflux,我想知道如何使用webflux在MicroService上提供静态内容,但我没有找到相关信息。
答案 0 :(得分:14)
试试这个
RouterFunction router = resources("/**", new ClassPathResource("public/"));
更新:从外部访问时,不要忘记在URL中指定静态文件的名称,例如localhost:8080/index.html
答案 1 :(得分:8)
Juan Medina是对的。我只是想让它更清晰,并提供一个reference link。
实际上,您只需添加一个RouterFunction bean来处理静态资源。您不必实现自己的RouterFunction,因为
RouterFunctions.resources("/**", new ClassPathResource("static/"));
给出了你想要的东西。
我所做的就是添加这段代码:
@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}
任何无法识别的请求都会落入静态路由器。
答案 2 :(得分:6)
将公共静态网络资源放入 public-web-resources
文件夹中:
./src/main/public-web-resources
配置 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/"
配置 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>
答案 3 :(得分:2)
感谢wildloop为我提供以下属性:
spring.webflux.static-path-pattern: "/**"
spring.resources.static-locations: "classpath:/public-web-resources/"
Spring boot添加以下日志行:
15:51:43.776 INFO Adding welcome page: class path resource [public-web-resources/index.html] - WebMvcAutoConfiguration$WelcomePageHandlerMapping.<init>
它是http://localhost:port/myapp/
的欢迎页面希望有一种方法可以在/myapp/docs
答案 4 :(得分:0)
我努力在[INCLUDES]
before = common.conf
[Definition]
failregex = <HOST> .* Authentication
可执行文件之外托管静态内容。使用spring boot mvc,您可以在.jar
旁边创建一个public
目录,它将为您提供文件。使用spring webflux并非如此。仅当您将静态文件放置在.jar
文件夹中然后构建resources/public
时,此处提到的解决方案才有效。
我让spring webflux提供了静态内容,而没有使用以下配置将其包含在jar中:
.jar
为此,您可以构建webflux spring:
application:
name: spring-cloud-gateway
webflux.static-path-pattern: "/**"
resources.static-locations: "file:public/"
并在稍后部署时添加静态文件。