blog

Spring WebfluxでR2DBCを使ってMySqlに接続する。

レスポンシブプログラミングとは、データ駆動型の非同期並行プログラミングパラダイムを指します。つまり、非同期データストリームプログラミングです。データストリームは、作成、結合、フィルタリング、変換、およ...

Nov 27, 2020 · 4 min. read
シェア

レスポンシブ・プログラミングとは、データ駆動型の非同期並行プログラミング・パラダイムを指します。つまり、非同期データストリームプログラミングです。データストリームは、作成、結合、フィルタリング、変換およびその他の操作、および最終的に目的の処理と結果を得るために。高性能で、イベントドリブンで、コンピューティングリソースをフルに活用し、よりエレガントな非同期プログラミングの経験が、それはまた、システムの過負荷を防ぐためにバックプレッシャーメカニズムを提供します。代表的なフレームワークは RxJavaReactorなど です。

長い間、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"
 }
]

フル

Read next

Javaの言語機能|Javaプラットフォームの理解

javaのコンパイルファイルは、機械語ではなく、接尾辞.classを持つバイトコードファイルは、異なるプラットフォーム上で実装された仮想マシンを介して、.classファイルは、対応するマシンコードに実行する異なるプラットフォームを達成するために解釈されます。 Java仮想マシンは、Javaバイトコードを実行する仮想マシンは、同じ...を使用することを目指して、異なるシステムごとに異なる実装を持っています。

Nov 26, 2020 · 3 min read