จาก Release note ของ Spring Boot 2.5 นั้น
พบว่ามี feature เกี่ยวกับการจัดการลำดับการทำงาน
ของการ initial data ใน Database มาใหม่
ซึ่งเปลี่ยนจาก Milestone version ไปเลย
จึงทำการสรุปการทำงานและใช้งานไว้นิดหน่อย

ขั้นตอนในการ initial data ใน database เป็นดังนี้

  • ถ้ามี ไฟล์ schema.sql และ data.sql จะทำงานเป็นอันดับแรก เหมือนกับการทำงานของ DB migration เช่น Flyway และ Liquibase
  • ต่อมาจึงทำงานกับพวก ORM เช่น JPA หรือ hibernate

ดังนั้นในการทำงานนั้น บ่อยครั้งต้องการให้ ORM ทำงานก่อน
ยกตัวอย่างเช่นใช้งาน Spring Data JPA
เพื่อให้ทำการสร้าง table ต่าง ๆ ขึ้นมาก่อน
จากนั้นจึงทำการ initial data ใน table ด้วยไฟล์ data.sql
ซึ่งสามารถ config ได้ในไฟล์ application.properties ดังนี้

spring.jpa.defer-datasource-initialization=true

แต่ถ้าไม่ต้องการไม่ให้ทำการ execute ไฟล์ data.sql และ schema.sql แล้ว
สามารถปิดการทำงานได้เช่นกัน ดังนี้

spring.sql.init.mode=never

หรือแม้แต่ในการ initial bean ต่าง ๆ ที่ใช้งาน @Bean
ต้องการให้ทำงานหลังจากการ initial table แล้วเท่านั้นจริง ๆ
ก็เพิ่ม annotation @DependsOnDatabaseInitialization ได้เลย

จากความสามารถเหล่านี้ น่าจะทำให้ง่ายและสะดวกมากยิ่งขึ้น