こんにちは、Spring Boot アプリケーションには、プロパティ ファイルを使用して r2dbc 接続プールが自動構成されています。
spring.r2dbc.url=r2dbc:pool:postgres://localhost:5432/ecom
spring.r2dbc.username=xxx
spring.r2dbc.password=yyy</code></pre>
ここで、PostgresqlConnection インスタンスを取得する必要があります。これを次のように行います。
this.connection = Mono.from(connectionFactory.create()).cast(PostgresqlConnection.class).block();
しかし、これはプール構成であるため、ClassCastException と、必要な PostgresqlConnection をラップする次の PooledConnection オブジェクトを受け取ります。
PooledConnection[PostgresqlConnection{client=io.r2dbc.postgresql.client.ReactorNettyClient@14c93774, codecs=io.r2dbc.postgresql.codec.DefaultCodecs@62a68bcb}]
PostgresqlConnection にアクセスして、通知などのネイティブ機能を使用する必要があります。
PostgresqlConnection connection = …;
Flux<Notification> listen = connection.createStatement("LISTEN mymessage")
.execute()
.flatMap(PostgresqlResult::getRowsUpdated)
.thenMany(connection.getNotifications());
問題は、connectionFactory から PostgresqlConnection インスタンスを適切に取得する方法です。どんな助けでも大歓迎です。