レスポンシブ・プログラミングとは、データ駆動型の非同期並行プログラミング・パラダイムを指します。つまり、非同期データストリームプログラミングです。データストリームは、作成、結合、フィルタリング、変換およびその他の操作、および最終的に目的の処理と結果を得るために。高性能で、イベントドリブンで、コンピューティングリソースをフルに活用し、よりエレガントな非同期プログラミングの経験が、それはまた、システムの過負荷を防ぐためにバックプレッシャーメカニズムを提供します。代表的なフレームワークは RxJava、Reactorなど です。
長い間、Javaの応答性は、MongoDBやRedisなどの非リレーショナル・データベースとのやりとりに限られていました。ほとんどのデータはまだリレーショナル・データベースに保存されており、ほとんどの場合、JavaはJDBCを使用してリレーショナル・データベースを操作します。そのため、レスポンシブ・データベース・ドライバ・プロトコルのサポートが急務となっています。現在市販されているレスポンシブ・データベース・ドライバ・プロトコルは、ADBAとR2DBCの2つです。
R2BDCは、Spring 5でレスポンシブWebフレームワークであるSpring WebFluxが リリースされた後、非同期レスポンシブに対応できるデータベースインタラクションAPIの緊急の必要性から生まれました。 標準やドライバが不足していたため、Pivotalチームはリアクティブなリレーショナルデータベース接続の研究を始め、実現可能性を評価し、データベースベンダーがリアクティブな非同期ノンブロッキングドライバのサポートに興味を持つかどうかを議論するために、 R2DBC 仕様のAPIを提案しました。R2DBCの最新 バージョンは 0.8.1.RELEASEで、ドライバの実装に加えて、 R2DBCコネクションプールと R2DBCプロキシが提供されています。ドライバの実装に加えて、R2DBCコネクションプールとR2DBCプロキシも提供します。 クラウドネイティブアプリケーションのサポートに加えて
r2jdbcベースのMySQLドライバはSpring Boot 2.3.0から正式にサポートされています。
R2DBCを使ってMySQLを操作するSpring WebFluxの作成も、WebFluxを最初に理解していればとても簡単です。
適切な依存関係をインポートします。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
</dependency>
設定ファイルで接続アドレスを設定
spring:
r2dbc:
password: admin
url: r2dbcs:mysql://localhost:3306/test_db
username: root
コーディング - データベースリレーションシップマッピングの作成
@Data
@Table("mall_ad")
public class AdBean {
@Id
private Integer id;
private String name;
private String link;
private String url;
private String content;
private LocalDateTime startTime;
private LocalDateTime endTime;
private Byte deleted;
}
コーディング
@Data
@Builder
public class AdVo {
private String name;
private String link;
private String url;
private String content;
}
コーディング - データベース操作オブジェクトの作成
public interface AdRepository extends ReactiveCrudRepository<AdBean,Integer> {
}
コーディング-サービスの構築
@Service
public class AdServiceImpl implements AdService {
@Autowired
private AdRepository adRepository;
/**
* 現在の広告を照会する
*
* @return
*/
@Override
public Flux<AdVo> findAll() {
//ここでは、ストリーム操作についてある程度理解しておく必要がある。
return adRepository.findAll().map(
adBean -> AdVo.builder()
.name(adBean.getName()).link(adBean.getLink())
.url(adBean.getUrl()).content(adBean.getContent())
.build()
);
}
}
コーディング - コントローラーの構築
@RestController
@RequestMapping("/api/ad")
public class AdController {
@Autowired
private AdService adService;
@GetMapping("/findAll")
public Flux<AdVo> findNowAd() {
return adService.findAll();
}
}
プロジェクトの開始
テストアプリ
// 3921
// http://...:///ll/
[
{
"name": "コラボレーション",
"link": "",
"url": "http://.../.pg",
"content": "コラボレーション"
},
{
"name": "イベント フードフェスティバル",
"link": "",
"url": "http://.../.pg",
"content": "イベント フードフェスティバル"
},
{
"name": "イベント 母の日",
"link": "",
"url": "http://.../.pg",
"content": "イベント 母の日5"
}
]




