SpringのリアクティブMongoでサブスクライブが機能し、ブロックが機能しないのはなぜですか?

マーティン・ドロズディク

私はプロジェクト新鮮なうちに作成春Initializrを選択することによりKotlinGradleM7Web-reactive

私は小さなプロジェクトを作りました:

data class Person (val id: String)

@Component class PersonHandler(val template: ReactiveMongoTemplate) 
{
    init
    {
        println("Initializing")

        val jim: Mono<Person> =  template.save(Person("Jim"))
        val john: Mono<Person> = template.save(Person("John"))
        val jack: Mono<Person> = template.save(Person("Jack"))

        launch(jim)
        launch(john)
        launch(jack)

        println("Finished Initializing")
    }

    fun launch(mono: Mono<Person>)
    {
        mono.subscribe({println(it.id)}, {println("Error")}) // This works
        // mono.block()  This just hangs
    } 
}

私は3人をデータベースに保存しようとしています。このsaveメソッドは、Mono実行する必要があるaだけを返しますサブスクライブするだけで実行しようとすると、すべてがうまく機能します。

Initializing
Finished Initializing
2017-12-21 13:14:39.513  INFO 17278 --- [      Thread-13] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:158}] to localhost:27017
2017-12-21 13:14:39.515  INFO 17278 --- [      Thread-12] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:4, serverValue:159}] to localhost:27017
2017-12-21 13:14:39.520  INFO 17278 --- [      Thread-14] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:5, serverValue:160}] to localhost:27017
Jim
Jack
John

ただし、アプリケーションのblock代わりに使用するとsubscribe、ハングします。

Initializing
2017-12-21 13:16:47.200  INFO 17463 --- [      Thread-14] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:163}] to localhost:27017

データベースを手動でクエリすると、ジムは保存されていますが、ジャックとジョンは保存されていないことがわかります

これはバグですか、それとも私は何か間違ったことをしていますか?コードが先に進む前に、ユーザーがデータベースにいることを保証したいので、本当に使用したいと思いますblock

関連性があるかどうかはわかりませんが、コンパイラの警告が表示されます

templateコンストラクターで非最終プロパティアクセスする

最小限の実例があります。2つのブランチが含まれています。1つは、この問題の回避策です。

https://github.com/martin-drozdik/spring-mongo-bug-example

ブライアン・クローゼル

これはSpringFrameworkのバグ/ユーザビリティの問題かもしれないと思います。

まず、subscribeの違いを強調しておきますblock

  • subscribeすぐにメソッドの仕事キックオフと戻ります。したがって、アプリケーションの他の部分が実行されたときに操作が実行されるという保証はありません。
  • block はブロッキング操作です。操作をトリガーし、完了を待ちます。

初期化作業の場合、操作の作成とブロックの1回の呼び出しがおそらく最良の選択です。

val jim: Mono<Person> =  template.save(Person("Jim"))
val john: Mono<Person> = template.save(Person("John"))
val jack: Mono<Person> = template.save(Person("Jack"))
jim.then(john).then(jack).block();

あなたが述べたように、を使用blockするとアプリケーションがハングします。これはSpringコンテキストの初期化の問題である可能性があります-正しく覚えていれば、このプロセスは一部の部分で単一のスレッドを想定し、リアクティブパイプラインを使用して多くのスレッドで作業をスケジュールする可能性があります。

最小限のサンプルアプリケーションを作成して(Java / Spring Boot / Spring Data Reactive Mongoのみを使用)、https: //jira.spring.ioで報告できますか?

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

アレイのObservableとサブスクライバーが機能しないのはなぜですか?

分類Dev

sedコマンドがインタラクティブに機能するのにスクリプトでは機能しないのはなぜですか?

分類Dev

プロパティオブザーバーがクラスで機能しないのはなぜですか?

分類Dev

エンティティの比較がサブクエリで機能しないのはなぜですか

分類Dev

goBack関数が機能しないのはなぜですか?リアクトネイティブ

分類Dev

スリックスライダーがタブで機能しないのはなぜですか?

分類Dev

Railsアセットパイプラインがサブディレクトリで驚くことなく機能しないのはなぜですか?

分類Dev

クリーンアップコマンドがGradle Reactネイティブプロジェクトで機能しないのはなぜですか?

分類Dev

このコードがリアクティブ関数で機能しないのはなぜですか?

分類Dev

このAngularSelectラッパーディレクティブが機能しないのはなぜですか?

分類Dev

最終的に例外でブロックがクライアントサーバープログラムで機能しないのはなぜですか?

分類Dev

テスト機能がユーザーをアクティブ化しないのはなぜですか?

分類Dev

ブロックが機能しないのはなぜですか

分類Dev

コールバックがaxiosライブラリで機能しないのはなぜですか?

分類Dev

`NOT IN` cteが機能しないのに、` NOT IN`サブクエリが機能するのはなぜですか?

分類Dev

このスイッチブロックが機能しないのはなぜですか?

分類Dev

インラインブロックと最大幅が一緒に機能しないのはなぜですか?

分類Dev

ng-hideがカスタムディレクティブで機能しないのはなぜですか?

分類Dev

ngClickがディレクティブ分離スコープで機能しないのはなぜですか?

分類Dev

サブクエリのxmlパスで照合が機能しないのはなぜですか?

分類Dev

このブロックがERBテンプレートで機能しないのはなぜですか

分類Dev

divタグがラッピングブロックとして機能しないのはなぜですか?

分類Dev

lateinitがオブジェクト型で機能するのにプリミティブ型では機能しないのはなぜですか?

分類Dev

Nginx:インデックスディレクティブが機能しないのはなぜですか、403は禁止されていますか?

分類Dev

Laravelコレクティブでブートストラップselectpickerが機能しないのはなぜですか?

分類Dev

「サブスクライブ」機能が登録されないのはなぜですか?RxJava Android Studio

分類Dev

クラスのプロパティである場合、テーブルの変数名の変更が機能しないのはなぜですか?

分類Dev

ブラケットアクセス表記が機能するのにドットが機能しないのはなぜですか?

分類Dev

ChoregrapheのPythonスクリプトボックスでALVideoDeviceのサブスクライブとサブスクライブ解除が機能しない

Related 関連記事

  1. 1

    アレイのObservableとサブスクライバーが機能しないのはなぜですか?

  2. 2

    sedコマンドがインタラクティブに機能するのにスクリプトでは機能しないのはなぜですか?

  3. 3

    プロパティオブザーバーがクラスで機能しないのはなぜですか?

  4. 4

    エンティティの比較がサブクエリで機能しないのはなぜですか

  5. 5

    goBack関数が機能しないのはなぜですか?リアクトネイティブ

  6. 6

    スリックスライダーがタブで機能しないのはなぜですか?

  7. 7

    Railsアセットパイプラインがサブディレクトリで驚くことなく機能しないのはなぜですか?

  8. 8

    クリーンアップコマンドがGradle Reactネイティブプロジェクトで機能しないのはなぜですか?

  9. 9

    このコードがリアクティブ関数で機能しないのはなぜですか?

  10. 10

    このAngularSelectラッパーディレクティブが機能しないのはなぜですか?

  11. 11

    最終的に例外でブロックがクライアントサーバープログラムで機能しないのはなぜですか?

  12. 12

    テスト機能がユーザーをアクティブ化しないのはなぜですか?

  13. 13

    ブロックが機能しないのはなぜですか

  14. 14

    コールバックがaxiosライブラリで機能しないのはなぜですか?

  15. 15

    `NOT IN` cteが機能しないのに、` NOT IN`サブクエリが機能するのはなぜですか?

  16. 16

    このスイッチブロックが機能しないのはなぜですか?

  17. 17

    インラインブロックと最大幅が一緒に機能しないのはなぜですか?

  18. 18

    ng-hideがカスタムディレクティブで機能しないのはなぜですか?

  19. 19

    ngClickがディレクティブ分離スコープで機能しないのはなぜですか?

  20. 20

    サブクエリのxmlパスで照合が機能しないのはなぜですか?

  21. 21

    このブロックがERBテンプレートで機能しないのはなぜですか

  22. 22

    divタグがラッピングブロックとして機能しないのはなぜですか?

  23. 23

    lateinitがオブジェクト型で機能するのにプリミティブ型では機能しないのはなぜですか?

  24. 24

    Nginx:インデックスディレクティブが機能しないのはなぜですか、403は禁止されていますか?

  25. 25

    Laravelコレクティブでブートストラップselectpickerが機能しないのはなぜですか?

  26. 26

    「サブスクライブ」機能が登録されないのはなぜですか?RxJava Android Studio

  27. 27

    クラスのプロパティである場合、テーブルの変数名の変更が機能しないのはなぜですか?

  28. 28

    ブラケットアクセス表記が機能するのにドットが機能しないのはなぜですか?

  29. 29

    ChoregrapheのPythonスクリプトボックスでALVideoDeviceのサブスクライブとサブスクライブ解除が機能しない

ホットタグ

アーカイブ