如何使用 Webflux 提供静态内容?
How to serve static content using Webflux?
我正在学习 webflux,我想知道如何使用 webflux 在微服务上提供静态内容,但我没有找到相关信息。
试试这个
RouterFunction router = resources("/**", new ClassPathResource("public/"));
更新: 从外部访问时,不要忘记在 URL 中指定静态文件的名称,例如 localhost:8080/index.html
Spring Web Flux & public 静态网页资源配置
将public静态网页资源放入public-web-resources
文件夹:
./src/main/public-web-resources
配置Spring启动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>
感谢 wildloop 为我工作,具有以下属性:
spring.webflux.static-path-pattern: "/**"
spring.resources.static-locations: "classpath:/public-web-resources/"
Spring 引导添加以下日志行:
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
上调用它
胡安麦地那是对的。我只是想让它更清楚并提供一个 reference link.
事实上,您只需添加一个RouterFunction bean 来处理静态资源。您不必实现自己的 RouterFunction 因为
RouterFunctions.resources("/**", new ClassPathResource("static/"));
给你想要的。
我所做的就是添加这段代码:
@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}
任何未识别的请求都会落入静态路由器。
我很难在 .jar
可执行文件之外托管静态内容。使用 spring boot mvc,您只需在 .jar
旁边创建一个 public
目录,它将为您提供文件。使用 spring webflux 情况并非如此。此处提到的解决方案仅在将静态文件放在 resources/public
文件夹中然后构建 .jar
.
时才有效
我得到 spring webflux 来提供静态内容,但没有将其包含在具有以下配置的 jar 中:
spring:
application:
name: spring-cloud-gateway
webflux.static-path-pattern: "/**"
resources.static-locations: "file:public/"
据此您可以构建 webflux jar
并稍后在部署时添加静态文件。
我正在学习 webflux,我想知道如何使用 webflux 在微服务上提供静态内容,但我没有找到相关信息。
试试这个
RouterFunction router = resources("/**", new ClassPathResource("public/"));
更新: 从外部访问时,不要忘记在 URL 中指定静态文件的名称,例如 localhost:8080/index.html
Spring Web Flux & public 静态网页资源配置
将public静态网页资源放入
public-web-resources
文件夹:./src/main/public-web-resources
配置Spring启动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>
感谢 wildloop 为我工作,具有以下属性:
spring.webflux.static-path-pattern: "/**"
spring.resources.static-locations: "classpath:/public-web-resources/"
Spring 引导添加以下日志行:
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
胡安麦地那是对的。我只是想让它更清楚并提供一个 reference link.
事实上,您只需添加一个RouterFunction bean 来处理静态资源。您不必实现自己的 RouterFunction 因为
RouterFunctions.resources("/**", new ClassPathResource("static/"));
给你想要的。
我所做的就是添加这段代码:
@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}
任何未识别的请求都会落入静态路由器。
我很难在 .jar
可执行文件之外托管静态内容。使用 spring boot mvc,您只需在 .jar
旁边创建一个 public
目录,它将为您提供文件。使用 spring webflux 情况并非如此。此处提到的解决方案仅在将静态文件放在 resources/public
文件夹中然后构建 .jar
.
我得到 spring webflux 来提供静态内容,但没有将其包含在具有以下配置的 jar 中:
spring:
application:
name: spring-cloud-gateway
webflux.static-path-pattern: "/**"
resources.static-locations: "file:public/"
据此您可以构建 webflux jar
并稍后在部署时添加静态文件。