web-dev-qa-db-ja.com

Webfluxを使用して静的コンテンツを提供する方法は?

私はwebfluxを学習しています。webfluxを使用してMicroServiceで静的コンテンツを提供する方法を知りたいのですが、それを行うための情報が見つかりませんでした。

19
jabrena

これを試して

RouterFunction router = resources("/**", new ClassPathResource("public/"));

PDATE:外部からアクセスする場合は、localhost:8080/index.htmlのように、URLに静的ファイルの名前を指定することを忘れないでください

14
Juan Medina

フアン・メディナはその通りです。私はそれをさらに明確にして、 参照リンク を提供したいだけです。

実際、静的リソースを処理するには、RouterFunction Beanを追加するだけです。 RouterFunctions.resources("/**", new ClassPathResource("static/"));が必要な機能を提供するため、独自のRouterFunctionを実装する必要はありません。

私がしているのは、次のコードを追加することだけです。

@Bean
RouterFunction<ServerResponse> staticResourceRouter(){
    return RouterFunctions.resources("/**", new ClassPathResource("static/"));
}

認識されなかった要求は、静的ルーターに分類されます。

10

Spring Web Flux&パブリック静的Webリソース構成

  • パブリック静的Webリソースをpublic-web-resourcesフォルダ:

    ./src/main/public-web-resources
    
  • 構成Spring Boot 2.0application.yaml

    spring.main.web-application-type: "REACTIVE"
    spring.webflux.static-path-pattern: "/app/**"
    spring.resources.static-locations:
      - "classpath:/public-web-resources/"
    
  • 構成maven-resources-pluginpom.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>
    
6
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で呼び出す方法があったらいいのに

2
No_One

.jar実行可能ファイルの外で静的コンテンツをホストするのに苦労しました。 Spring Boot MVCを使用すると、.jarの横にpublicディレクトリを作成するだけで、ファイルが提供されます。春のwebfluxではそうではありません。ここで説明する解決策は、resources/publicフォルダーに静的ファイルを配置してから.jarをビルドした場合にのみ機能します。

私は、次の設定でjarに含まずに静的コンテンツを提供するために春のwebfluxを取得しました:

spring:
  application:
    name: spring-cloud-gateway
  webflux.static-path-pattern: "/**"
  resources.static-locations: "file:public/"

これを使用すると、webflux jarを構築し、展開後に静的ファイルを追加できます。

0
Luke Kroon