/spring-boot-reactive-example

ตัวอย่างการเขียน Java Spring-boot Reactive (WebFlux)

Primary LanguageJava

Spring-boot Reactive Example

ตัวอย่างการเขียน Java Spring-boot Reactive (WebFlux) ซึ่งเป็นการเขียน Spring-boot แบบ Non-Blocking I/O หรือ Asynchronous

Reactive Spring

เชิญชวน

อยากเชิญชวน คนที่มีความรู้ความสามารถด้านใดด้านหนึ่งตามที่ตัวเองถนัด ทำตัวอย่างอะไรทำนองนี้ไว้
เพื่อให้ผู้เริ่มต้น หรือมือใหม่ได้มีตัวอย่างอ้างอิงที่สามารถเอาไปประยุกต์ใช้ได้

ตัวผมเองก็ใช้อันนี้สอนน้อง ๆ สอนเด็กฝึกงานที่บริษัท อีกทั้งเอาไว้ทบทวนตัวเองด้วย
กับเห็นว่ามันมีประโยชน์สำหรับทุกคน เลยแชร์ไว้ครับ

ปัญหา / ข้อเสนอแนะ

หากพบปัญหา หรือ ต้องการให้ทำอะไรเพิ่ม รบกวนช่วยเปิด issue หรือ fork/pull request ให้ด้วยน่ะครับ
ขอบคุณครับ :)

การสนันสนุน หรือ Donate

ตอนนี้ผมยังไม่ได้เปิด Donate เพื่อรับเงินสนับสนุน Repository นี้
แต่ถ้าอนาคตมีจริง ๆ สำหรับคนที่เอา Repository นี้ไปใช้สร้างสรรค์ผลงาน เพื่อให้เกิดมูลค่า
ผมคงขอแค่ค่ากาแฟคนละ 1 แก้วก็พอครับ (ไม่เอาเยอะ)
เพราะ Repository นี้สร้างขึ้นมาด้วยความตั้งใจว่า อยากที่จะทำอะไรดี ๆ ให้สังคมจริง ๆ

Spring

https://spring.io

Spring เป็น Framework ฝั่งภาษา Java สำหรับใช้เขียน Web และ Back-end Application ที่ได้รับความนิยมอย่างมากในปัจจุบัน มีระบบนิเวศ หรือ Ecosystem ต่าง ๆ มากมาย ทำให้สามารถนำ Spring ไปใช้สร้างสรรค์ผลงานต่าง ๆ ได้อย่างรวดเร็ว

Spring-boot

https://spring.io/projects/spring-boot

Spring-boot เป็น Subset (Project นึง) ของ Spring Framework เป็นการเอา Ecosystem ต่าง ๆ ของ Spring ที่มีอยู่ มาประกอบร่างรวมกัน เพื่อให้ใช้งาน Spring ได้ง่ายขึ้น โดยมีจุดเด่นดังนี้

  1. สามารถใช้ Spring-boot ทำ Stand Alone หรือ Micro Service Application ได้
  2. มี Embeded Application Server ภายในตัว สามารถ Start ตัวเองได้ โดยไม่ต้องพึ่งพา Application Server จากภายนอก
  3. มีระบบ Auto Configuration
  4. Config ง่าย
  5. ใช้งานง่าย
  6. Deploy ง่าย
  7. อื่น ๆ

Spring-boot มี 2 แบบ คือ

  1. แบบ Servlet Stack
  2. แบบ Reactive Stack

Servlet Stack

  • เป็นการเขียน Code แบบ Blocking I/O
  • ใช้ Web MVC เป็น Base
  • เขียนง่าย ตรงไปตรงมา
  • Application Server จะใช้เทคนิคในการจัดการ Request/Response ด้วย Thread Pool Connection

Reactive Stack

  • เป็นการเขียน Code แบบ Non-Blocking I/O
  • เขียน Code แบบ Reactive (เป็นการเขียนโปรแกรมรูปแบบหนึ่ง ที่ตอบสนองต่อเหตุการณ์ที่เกิดขึ้น)
  • ใช้ WebFlux เป็น Base
  • เขียน/เข้าใจ ยากกว่าแบบ Servlet Stack
  • Application Server จะใช้เทคนิคในการจัดการ Request/Response ด้วย Event Loop
  • กิน Resources (CPU, RAM) น้อยกว่าแบบ Servlet Stack
  • รองรับ Concurrent ได้มากกว่าแบบ Servlet Stack

Spring-boot Reactive

สามารถเขียนได้ 2 แบบ คือ

  1. แบบ Annotated Controllers
  2. แบบ Functional Endpoints

จากตัวอย่าง โดยส่วนมากจะใช้เป็นแบบ Annotated Controllers

เอกสาร Spring-boot Reactive

สำหรับคนที่เขียน Spring-boot ใหม่ ๆ แล้วสงสัยว่า เราจะรู้ได้ยังไงว่าเราสามารถ Config Application Properties อะไรได้บ้าง ให้ดูจากหน้านี้

ข้อแตกต่าง

WebFlux Performance

Prerequisites

สิ่งที่ต้องรู้ก่อนเขียน Spring-boot Reactive

ตัวอย่างการเขียน Reactor

เริ่ม

Code บางตัวอาจจะไม่สามารถเอาไป Run ได้เลย เนื่องจากต้องเตรียม environment ต่าง ๆ ให้พร้อมก่อน เช่น Postgresql, Mongodb, Redis เป็นต้น ต้องมี database หรือ data source ปลายทางก่อน

ให้เรียนรู้/ดูตัวอย่างตามลำดับต่อไปนี้

ปรับ Code เป็น Java 11 แล้ว

รอการปรับ Code เป็น Java 11