H2 เป็นซอฟแวร์ฐานข้อมูลเชิงสัมพันธ์ (relational database) ที่ Spring Boot เลือกใช้เป็นค่าตั้งต้น H2 ถูกพัฒนาโดยใช้ภาษาจาวาและเป็นโอเพ่นซอร์ส H2 เป็นฐานข้อมูลที่มีความสามารถพื้นฐานครบถ้วน แต่อาจจะไม่ได้มีความสามารถในแบบซับซ้อนมากๆเหมือนซอฟแวร์ฐานข้อมูลขนาดใหญ่อื่นๆ ทำให้สามารถติดตั้งและใช้งานได้ง่าย ทำงานได้รวดเร็ว (lightweight) H2 รองรับการใช้งานภาษา SQL ในการติดต่อกับฐานข้อมูล รองรับ JDBC API รองรับการใช้งานทั้งแบบเซิร์ฟเวอร์และแบบฝังตัว รองรับการใช้งานแบบโหลดฐานข้อมูลทั้งหมดไว้ในหน่วยความจำ (in-memory database) มีแอพพลิเคชั่นที่ใช้จัดการฐานข้อมูล สามารถทำงานผ่านบราวเซอร์ และมีขนาด .jar ไฟล์เพียง 2 MB การใช้งาน H2 ในแบบโหลดฐานข้อมูลทั้งหมดไว้ในหน่วยความจำนั้น ข้อมูลในระหว่างที่เราใช้งานแอพพลิชั่นจะเก็บอยู่ในหน่วยความจำทั้งหมดและจะหายไปเมื่อปิดแอพพลิเคชั่น ส่วนการใช้งานในแบบแบบเซิร์ฟเวอร์จะเป็นการเก็บฐานข้อมูลเป็นไฟล์

เพื่อศึกษาการใช้งานเบื้องต้นเราจะสร้างโครงการอย่างง่ายๆขึ้นมาโดยไปที่ https://start.spring.io/  เพื่อสร้างไฟล์โครงสร้างพื้นฐาน โดยเราจะเลือกไลบรารี่ (dependency) ที่ต้องการตามตัวอย่าง

เมื่อได้ไฟล์มาแล้วก็ขยายไฟล์ไปยังไดเร็คทอรี่ที่ต้องการ และเมื่อดูในไฟล์ build.gradle จะเห็นไลบรารี่ที่เราเลือกภายใต้หัวข้อ dependencies

จากนั้นเราจะมาตั้งค่าพารามิเตอร์ของ H2 ในไฟล์ ./src/main/resources/application.properties ดังนี้

#datasource settings
spring.datasource.url=jdbc:h2:file:~/sampleDB
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=abc123

#data settings
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update

#console settings
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.h2.console.settings.trace=false
spring.jpa.show-sql=true

ความหมายของแต่ละบรรทัดมีดังนี้

spring.datasource.driverClassName=org.h2.Driver เป็นการเรียกใช้คลาสที่เป็น datasouce driver ของ H2

spring.datasource.url=jdbc:h2:file:~/sampleDB เป็นการกำหนดที่ที่วางไฟล์ฐานข้อมูล

spring.datasource.username=sa เป็นการกำหนดชื่อผู้ใช้ฐานข้อมูล

spring.datasource.password=abc123 เป็นการกำหนดรหัสผ่าน

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect เป็นการระบุชนิดของฐานข้อมูล

spring.h2.console.enabled=true เป็นการเปิดการใช้ตอนโซลของ H2

spring.h2.console.settings.trace=false เป็นการกำหนดให้ซ่อน trace ของ H2 ใน log

จากนั้นสั่งสร้างโครงการด้วยคำสั่ง  ./gradlew build 

และเมื่อเราไปดูที่ภายใต้ไดเร็คทอรี่ของผู้ใช้งาน (~/) จะพบว่ามีฐานข้อมูลถูกสร้างขึ้นมา

และเมื่อเราเรียก .jar ไฟล์ด้วยคำสั่ง java -jar build/libs/*.jar จะเห็นว่า Spring Boot เรียกใช้งานฐานข้อมูลด้วย

สังเกตบรรทัดที่มีการโหลด H2 Console ซึ่งเขียนว่า … H2ConsoleAutoConfiguration : H2 console available at ‘/h2’ ..ตามที่เรากำหนดไว้ในไฟล์ application.properties นั่นคือเราสามารถเรียกแอพพลิเคชั่นที่ใช้จัดการฐานข้อมูล H2 ได้จากพาธ /h2 และจากบรรทัดที่มีการโหลด Tomcat ซึ่งเขียนว่า … embedded.tomcat.TomcatWebServer : Tomcat started on port(s):8080 (http) … นั่นหมายความว่าได้มีการเรียกเว็บเซิร์ฟเวอร์แอพพลิเคชั่นมาให้เราใช้งานด้วย ดังนั้นเราสามารถใช้บราวซ์เพื่อเรียกใช้งานแอพพลิเคชั่นใช้จัดการฐานข้อมูลได้ดังนี้

ให้เราแทนที่ค่าในช่อง JDBC URL: ด้วย jdbc:h2:file:~/sampleDB ซึ่งเป็นที่อยู่ของฐานข้อมูลของเราตามค่าที่กำหนดไว้ในไฟล์ application.properties และใช้ User Name และ Password ตามที่กำหนดไว้เพื่อเชื่อมต่อกับฐานข้อมูล และกดปุุ่ม Connect เพื่อเข้าหน้าหลักของแอพพลิเคชั่นจัดการฐานข้อมูล จะเห็นว่าการติดตั้งและใช้งานฐานข้อมูล H2 ด้วย Spring Boot นั้นง่ายมาก