複数のリアクティブ操作を実行する正しい方法

A5300

私はそのMono<FooBar>値に基づいてリアクティブリポジトリから取得します。他の2つのオブジェクトを作成し、リアクティブリポジトリを使用してそれらを保存し、FooBarオブジェクトを変更して保存する必要があります。

私はリアクティブプログラミングに慣れていないので、次のソリューションを使用しました。これは機能していますが、リアクティブAPIを正しく使用しているかどうかはわかりません。

@Test
void createAndSave() {
    Mono<FooBar> fooBarMono = findFooBar()  // returns Mono<FooBar>
            .map(fooBar -> {
        createAndSaveLoremBar(fooBar).subscribe();   // returns Mono<LoremBar>
        createAndSaveDoloremBar(fooBar).subscribe(); // returns Mono<DoloremBar>

        fooBar.setActive(true);

        return saveFooBar(fooBar);          // returns Mono<FooBar>
    }).flatMap(Function.identity());

    StepVerifier.create(fooBarMono)
            .expectNextMatches(Objects::nonNull)
            .expectComplete()
            .verify();

}

コンソールログから:

   saved lorem bar
   saved dolorem bar
   saved foo bar
アレクサンダーパンキン

最初は、非同期(リアクティブ)の世界でオブジェクトを変更することはお勧めできません。

とにかく、あなたのソリューションでは、loremとdoloremの保存で発生する可能性のあるエラーは無視されます。あなたはそれを次のように改善することができます:

Mono<FooBar> fooBarMono = findFooBar()
        .flatMap(fooBar -> Flux.merge(
                createAndSaveLoremBar(fooBar),
                createAndSaveDoloremBar(fooBar)) // asynchronously saving lorem and dolorem
                .then(Mono.fromCallable(() -> {  // if there wasn't errors, mutate and save fooBar
                    fooBar.setActive(true);
                    return fooBar;
                }).flatMap(fooBar1 -> saveFooBar(fooBar1))));

fooBartrueactiveフラグ使用してコピーを作成できれば、コードはより単純になる可能性があります。たとえば、lombokを使用します。

@Builder(toBuilder = true)
public class FooBar {
...
}

Mono<FooBar> fooBarMono = findFooBar()
        .flatMap(fooBar -> Flux.merge(
                createAndSaveLoremBar(fooBar),
                createAndSaveDoloremBar(fooBar))
                .then(saveFooBar(fooBar.toBuilder().active(true).build())));

また、結果に関心saveFooBar(...)がなく、完了シグナルのみに関心がある場合は、3つすべての保存を非同期で行うことができます。

Flux<Object> flux = findFooBar()
        .flatMapMany(fooBar -> Flux.merge(
                createAndSaveLoremBar(fooBar),
                createAndSaveDoloremBar(fooBar),
                saveFooBar(fooBar.toBuilder().active(true).build())));

実際、最後のアプローチでは3つの結果すべてを収集でき、このアプローチを好むはずですが、完全な例を作成するためのクラスと要件に関する十分な情報がありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のリアクティブeventExprでeventReactiveを実装する方法は?

分類Dev

ルックアップテーブルに対して実行されている複数のサブクエリを最適化する方法

分類Dev

アクティビティ図。複数の選択を定義する正しい方法ですか?

分類Dev

EFコア:関連する1対多のエンティティの複数のレベルでデータをクエリする正しい方法

分類Dev

OCamlで複数のアリティ関数を定義する正しい方法は何ですか?

分類Dev

Git:ベアリポジトリのアクティブブランチを変更する正しい方法は?

分類Dev

複数のテーブルを結合する遅いクエリ実行

分類Dev

phpを使用してmysqlテーブルで複数のクエリを実行する方法

分類Dev

MongoDBアグリゲーション-単一のクエリで複数の操作を実行する方法は?

分類Dev

1つのタブで複数のアクティビティを実行する

分類Dev

リアクティブMongoDBを使用してWebfluxのMonoでn回操作を実行します

分類Dev

GoogleCloudデータストア内の複数のエンティティ間でクエリを実行する

分類Dev

複数のcsvファイルに対していくつかの基本的な操作を実行するスクリプトを作成する方法

分類Dev

DOMで複数のディレクティブを実行する

分類Dev

アクセシビリティ:1つのINPUTアイテムに複数のLABEL要素を正しく使用する方法(ARIAなどを介して)?

分類Dev

正規表現に基づいてアクティブレコード検索を実行する方法

分類Dev

Ruby onRailsのアクティブレコードを使用してSQL操作を実行する

分類Dev

JavaScript:複数のREST呼び出しを次々に実行する正しい方法

分類Dev

1つのリクエストで複数の関連エンティティを投稿する正しいJSONAPIの方法は何ですか?

分類Dev

C#のMongoDB-複数のフィルタリングを実行する正しい方法は何ですか

分類Dev

複数のIDを操作するときにJPQLでCRUD操作を行う正しい方法は何ですか

分類Dev

複数のアクティブなシェルで同時にコマンドを実行する

分類Dev

リアクティブ拡張を使用して、複数の応答を正しい順序で処理します

分類Dev

予期しないカーディナリティ違反(サブクエリが複数の行を返す)

分類Dev

SQLクエリ:1つのテーブル内で複数のカウントの比較を実行する方法

分類Dev

正規表現を使用して複数行のテキスト ブロックを dict に解析する方法は?

分類Dev

(psqlインタラクティブターミナルから)複数のSQLクエリを実行するにはどうすればよいですか?

分類Dev

プロセス実行をリアクティブ `Observable [String]として実装する方法

分類Dev

複数の行を追加して、リアクティブ形式で1つの選択ボックスの変更に依存する値を取得します

Related 関連記事

  1. 1

    複数のリアクティブeventExprでeventReactiveを実装する方法は?

  2. 2

    ルックアップテーブルに対して実行されている複数のサブクエリを最適化する方法

  3. 3

    アクティビティ図。複数の選択を定義する正しい方法ですか?

  4. 4

    EFコア:関連する1対多のエンティティの複数のレベルでデータをクエリする正しい方法

  5. 5

    OCamlで複数のアリティ関数を定義する正しい方法は何ですか?

  6. 6

    Git:ベアリポジトリのアクティブブランチを変更する正しい方法は?

  7. 7

    複数のテーブルを結合する遅いクエリ実行

  8. 8

    phpを使用してmysqlテーブルで複数のクエリを実行する方法

  9. 9

    MongoDBアグリゲーション-単一のクエリで複数の操作を実行する方法は?

  10. 10

    1つのタブで複数のアクティビティを実行する

  11. 11

    リアクティブMongoDBを使用してWebfluxのMonoでn回操作を実行します

  12. 12

    GoogleCloudデータストア内の複数のエンティティ間でクエリを実行する

  13. 13

    複数のcsvファイルに対していくつかの基本的な操作を実行するスクリプトを作成する方法

  14. 14

    DOMで複数のディレクティブを実行する

  15. 15

    アクセシビリティ:1つのINPUTアイテムに複数のLABEL要素を正しく使用する方法(ARIAなどを介して)?

  16. 16

    正規表現に基づいてアクティブレコード検索を実行する方法

  17. 17

    Ruby onRailsのアクティブレコードを使用してSQL操作を実行する

  18. 18

    JavaScript:複数のREST呼び出しを次々に実行する正しい方法

  19. 19

    1つのリクエストで複数の関連エンティティを投稿する正しいJSONAPIの方法は何ですか?

  20. 20

    C#のMongoDB-複数のフィルタリングを実行する正しい方法は何ですか

  21. 21

    複数のIDを操作するときにJPQLでCRUD操作を行う正しい方法は何ですか

  22. 22

    複数のアクティブなシェルで同時にコマンドを実行する

  23. 23

    リアクティブ拡張を使用して、複数の応答を正しい順序で処理します

  24. 24

    予期しないカーディナリティ違反(サブクエリが複数の行を返す)

  25. 25

    SQLクエリ:1つのテーブル内で複数のカウントの比較を実行する方法

  26. 26

    正規表現を使用して複数行のテキスト ブロックを dict に解析する方法は?

  27. 27

    (psqlインタラクティブターミナルから)複数のSQLクエリを実行するにはどうすればよいですか?

  28. 28

    プロセス実行をリアクティブ `Observable [String]として実装する方法

  29. 29

    複数の行を追加して、リアクティブ形式で1つの選択ボックスの変更に依存する値を取得します

ホットタグ

アーカイブ