Spring Boot Kotlin - ការ Bootstrapping
ជំពូកនេះនឹងពន្យល់អ្នកពីរបៀបក្នុងការ bootstrapping នៅលើកម្មវិធី Spring Boot។
Spring Initializer
- ដើម្បីអាចបង្កើតនូវ Project Spring Boot មួយបានគឺមានវិធីច្រើន តែនៅក្នុង Tutorial មួយនេះគឺយើងនឹងនាំអ្នកទៅបង្កើត Project Spring Boot នៅលើគេហទំព័រ Spring Initializer។
 

នៅក្នុងរូបខាងលើគឺអ្នកនឹងបានឃើញនូវផ្ទាំងមួយ ដែលផ្ទាំងមួយនេះគឺប្រើសម្រាប់បង្កើតនូវ Project Spring Boot។ ឥឡូវយើងនឹងនាំអ្នកទៅស្វែងយល់ពីចំណុចនីមួយៗនៅក្នុងផ្ទាំងនេះ
Project: នៅក្នុងផ្នែកនេះគឺគេទាមទារឲ្យអ្នកធ្វើការជ្រើសរើសនូវប្រភេទនៃអ្នកគ្រប់គ្រង់ Project (អ្នកគ្រប់គ្រង Project គឺជាអ្នកដែលអាចរៀបចំឲ្យបានត្រឹមត្រូវទាក់ទងនឹង dependencies ដែលអ្នកត្រូវយកមកប្រើនៅក្នុង Project ហើយម៉្យាងវិញទៀតគឺអាចកំណត់នូវ Version របស់ Project បានដូចគ្នានិងមានជាច្រើនទៀត។ល។) ហើយសម្រាប់អ្នកគ្រប់គ្រង Project នេះគឺមានចំនួនពីរដូចខាងក្រោម៖
- Maven ជាឧបករណ៍សម្រាប់គ្រប់គ្រង 
Projectដែលមានលក្ខណៈជាopen-source softwareហើយត្រូវប្រើជាចម្បងសម្រាប់ Project Java។ - Gradle ជាឧបករណ៍បង្កើតស្វ័យប្រវិត្តិកម្ម ដែលមានលក្ខណៈជា 
open-sourceហើយវាបង្កើតឡើងបានដោយផ្អែកលើគោលគំនិតរបស់ Apache Maven និង Apache Ant។ 
មូលហេតុដែលអ្នកគួរប្រើ Gradle ព្រោះវាជៀសវាងការតាមដាននូវកិច្ចការដដែលៗ ហើយវាតាមដានតែកិច្ចការណាដែលត្រូវបានផ្លាស់ប្តូរប៉ុណ្ណោះ ដូច្នេះវាផ្តល់នូវដំណើរការលឿនជាងមុន។
- Maven ជាឧបករណ៍សម្រាប់គ្រប់គ្រង 
 Language: នៅក្នុងផ្នែកនេះគឺគេទាមទារឲ្យអ្នកធ្វើការជ្រើសរើសនូវប្រភេទនៃភាសា ដែលមានដូចខាងក្រោម៖
- Java ជាភាសាកម្មវិធីដែលត្រូវបានប្រើប្រាស់យ៉ាងទូលំទូលាយ ដែលដំណើរការលើឧបករណ៍រាប់លានរួមទាំងកុំព្យូទ័រ កុំព្យូទ័រយួរដៃ ឧបករណ៍ចល័ត ឧបករណ៍លេងហ្គេម ឧបករណ៍វេជ្ជសាស្ត្រ និងឧបករណ៍ជាច្រើនទៀត។ ទម្រង់នៃភាសា Java គឺពឹងផ្អែកទៅលើភាសា C និង C++។
 - Kotlin ជាភាសាកម្មវិធីថ្មីដែលមានលក្ខណៈ Open Source ហើយដូចទៅនឹងភាសា Java និង JavaScript ដែរ។ វាជាភាសាមួយដែលសំបូរបែប ដែលប្រមូលផ្តុំទៅដោយមុខងារជាច្រើនដែលស្ថិតនៅកន្លែងតែមួយ។ បច្ចុប្បន្ននេះ Kotlin ដំណើរការលើ JVM។
 - Groovy ជា 
object orientedនិងមានទម្រង់លក្ខណៈដូចភាសា Java។ កូដរបស់ Groovy ត្រូវcompileទៅជា Java Bytecode ហើយអាចដំណើរការនៅគ្រប់platformដែលមាន JRE។ 
Spring Boot: នៅក្នុងផ្នែកនេះគឺគេទាមទារឲ្យអ្នកធ្វើការជ្រើសរើសនូវប្រភេទនៃ
versionរបស់ Spring Boot ដូច្នេះអ្នកគួរជ្រើសរើសយកversionចុងក្រោយគេ។Project Metadata: នៅក្នុងផ្នែកនេះគឺគេទាមទារឲ្យអ្នកធ្វើការបំពេញនៅព័ត៌មានចំនួនទាក់ទងនឹង Project៖
- Group ជាការបញ្ជាក់ឈ្មោះរបស់ 
package។ - Artifact ជាការបញ្ជាក់ឈ្មោះនៃ 
Application។ - Name ដូចទៅនឹង 
Artifactដែរ។ - Description ជាការពិពណ៍នាទៅលើ 
Project។ - Package name ដូចទៅនឹង 
Group។ - Packaging ជាការជ្រើសរើសនូវប្រភេទនៃ 
packagingសម្រាប់buildយកទៅដំណើរក្នុងការប្រើប្រាស់ ហើយវាមានពីរគឺ:- Jar ជា Java Application Archive ដែលអាចដំណើរការកម្មវិធីនៅកុំព្យូទ័ររបស់ប្រើប្រាស់បានធម្មតា។
 - War ជា Web Application Archive ដែលអាចដំណើរការកម្មវិធីបានតែនៅលើ 
server។ 
 - Java ជាការជ្រើសរើសនូវប្រភេទនៃ 
versionរបស់ Java ដូច្នេះអ្នកអាចជ្រើសរើសយកversionណាដែលអ្នកចង់ប្រើបាន។ 
- Group ជាការបញ្ជាក់ឈ្មោះរបស់ 
 Dependencies: នៅក្នុងផ្នែកនេះគឺគេទាមទារឲ្យអ្នកធ្វើការជ្រើសរើសនូវប្រភេទនៃ
dependenciesដូច្នេះអ្នកអាចរើសនូវdependenciesដូចក្នុងរូបក៏បានឬក៏រើសតែ Spring Web មួយសិនក៏បាន។
បន្ទាប់ពីនេះអ្នកនឹងឃើញនូវប៊ូតុងនៅខាងក្រោមចំនួនបីបន្ថែមទៀត:
- GENERATE: ជាប៊ូតុងសម្រាប់បង្កើត Project Spring Boot។
 - EXPLOER: ជាប៊ូតុងសម្រាប់មើល Structure Project Spring Boot។
 - SHARE...: ជាប៊ូតុងសម្រាប់ចែករំលែក Project Spring Boot។
 
បន្ទាប់ពីចុចប៊ូតុង Generate រួចរាល់ វាផ្តល់
zip fileមួយដូចរូបខាងក្រោម:

- បន្ទាប់មកអ្នកអាចធ្វើការ Extract នូវ 
zip fileនោះ ហើយបន្ទាប់គឺបើក IntelliJ IDEA IDE ហើយបើកនូវ Project ដែលអ្នកបាន Extract រួចរាល់នោះ។ 

- បន្ទាប់ពីបានបើក Project នោះនៅក្នុង IntelliJ IDEA IDE រួចរាល់គឺអ្នកត្រូវធ្វើការរងចាំឲ្យ IntelliJ IDEA IDE ត្រូវធ្វើការ Sync នូវ Project ឲ្យចប់អស់សិន ទើបអ្នកអាចចាប់ផ្តើមអភិវឌ្ឍនូវ Project មួយនេះបាន។
 

- បន្ទាប់ពី Project ត្រូវបាន Synced រួចរាល់ អ្នកអាចក្រឡេកមើលនូវ Project Structure បន្តិច ដូចរូបខាងក្រោម:
 

- រូបភាពខាងក្រោមនេះគឺជា Project Structure ដែលត្រូវបាន Extract ចេញពី 
zip fileហើយមិនទាន់បានរៀបចំត្រឹមត្រូវ។ 

- រូបភាពខាងក្រោមនេះគឺជា Project Structure ដែលត្រូវបានលុបចោលនូវ Folders ឬក៏ Files ដែលឥតប្រយោជន៍ចោល និងបានរៀបចំបានត្រឹមត្រូវ។
 

- រូបភាពខាងក្រោមនេះគឺជាឯកសារ 
build.gradle.ktsដែលជាឯកសារអ្នកអាចបន្ថែមនូវdependenciesចូលបន្ថែមឬក៏កែប្រែ Version នៃ Java, Kotlin, Spring Boot។ល។ 

- ស្វែងយល់បន្ថែមពីឯកសារ 
build.gradle.kts: 
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
  id("org.springframework.boot") version "2.5.1"
  id("io.spring.dependency-management") version "1.0.11.RELEASE"
  kotlin("jvm") version "1.5.10"
  kotlin("plugin.spring") version "1.5.10"
  kotlin("plugin.jpa") version "1.5.10"
}
- Plugins: បន្ថែមទៅលើ Kotlin Gradle plugin, លំនាំដើមនៃការ 
configurationគឺប្រកាសkotlin-spring-pluginដែលវាអាចជួយឲ្យclassesនិងmethodsអាចមានលក្ខណៈopenគឺអាចឲ្យclassesផ្សេងអាចinheritedទៅប្រើបាន(class នៅក្នុង Kotlin គឺមិនដូចក្នុង Java ទេ បើសិនមិនដាក់ open keyword នៅពីមុខ class នោះវានឹងក្លាយជា final class)។ មួយវិញទៀតដើម្បីអាចប្រើKotlin non-nullable propertiesជាមួយ JPA គឺអ្នកត្រូវបើកenabledនូវ Kotlin JPA plugin។ វានឹងបង្កើតនូវno-arg constructorsសម្រាប់classទាំងអស់ដែលannotatedជាមួយនឹង@Entity,@MappedSuperclass, ឬក៏@Embeddeable។ 
group = "com.webapp"
version = "0.0.1-SNAPSHOT"
java.soruceCompatibility = JavaVersion.VERSION_11
- ខាងលើនេះគឺមានជា 
groupដែលជាឈ្មោះpackage,versionជាversionនៃapplicationដែលត្រូវបានbuild,java.soruceCompatibilityជាការកំណត់ទៅលើversionរបស់ Java សម្រាប់build។ 
repositories {
  mavenCentral()
}
- Repositories: ជាការកំណត់នូវកន្លែងនៃការទាញយក 
dependenciesមកប្រើនៅក្នុង Project ដូចពេលអ្នកដាក់mavenCentral()ចឹងវានឹងទៅទាញយកនៅគេហទំព័រ Maven Central Repository។ 
dependencies {
  implementation("org.springframework.boot:spring-boot-starter-data-jpa")
  implementation("org.springframework.boot:spring-boot-starter-web")
  implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
  implementation("org.jetbrains.kotlin:kotlin-reflect")
  implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
  runtimeOnly("com.h2database:h2")
  testImplementation("org.springframework.boot:spring-boot-starter-test")
}
Dependencies:
Libraryចំនួនបីរបស់ Kotlin ដែលត្រូវបានទាមទារសម្រាប់ Project Spring Boot ដែលមានដូចខាងក្រោម:- kotlin-stdlib-jdk8: ជាស្តង់ដារ 
Libraryរបស់ Kotlin នៃ Java 8 Variant។ - kotlin-reflect: ជា Kotlin 
reflection library។ - jackson-module-kotlin: ដាក់សម្រាប់ឲ្យគាំទ្រនឹង 
serialization/deserializationនៃclassesនិងdata classesរបស់ Kotlin។ 
ហើយនៅមាន
dependenciesមួយចំនួនទៀត ដែលជារបស់ Spring និង Database ដែលមានដូចខាងក្រោម:- spring-boot-starter-data-jpa: ជា 
Libraryរបស់ Spring Data JPA។ - spring-boot-starter-web: ជា 
Libraryរបស់ Spring Web។ - h2: ជា 
Libraryរបស់ H2 Database។ - spring-boot-starter-test: ជា 
Libraryរបស់ Spring Test។ 
មួយវិញទៀត ឃើញថានៅរាល់ការទាញយក
dependenciesមកគឺមានជាការប្រើនូវមុខងារផ្សេងៗគ្នាដូចជាimplementationដែលប្រើសម្រាប់ឲ្យដំណើរការនូវdependenciesនោះចាប់ផ្តើមតាំងពីពេលimplementទៅ(ពេលសរសេរកូដ),runtimeOnlyគឺដំណើរការតែពេលrun timeរីឯtestImplementationគឺដំណើរការនៅពេលtest។- kotlin-stdlib-jdk8: ជាស្តង់ដារ 
 
tasks.withType<KotlinCompile> {
  kotlinOptions {
    freeCompilerArgs = listOf("-Xjsr305=strict")
    jvmTarget = "11"
  }
}
- Compile options: លក្ខណៈសំខាន់របស់ Kotlin គឺ 
null-safetyដែលជាវាជួយដោះស្រាយបញ្ហាបានយ៉ាងច្រើននៅពេលcompile timeវាជៀសវាងនូវការexceptionដ៏ល្បីគឺ NullPointerException នៅពេលrun time។ ដើម្បីបន្ថែមនូវមុខងារnull-safetyនេះបានគឺអ្នកត្រូវបន្ថែមនូវ-Xjsr305compiler ដែលមាន flag ជាមួយនឹងstrict។ 
tasks.withType<Test> {
  useJUnitPlatform()
}
- Test options: ជាការចុះបញ្ជីក្នុងការ 
testingដោយប្រើ JUnit5។ 
- រូបភាពខាងក្រោមនេះគឺនៅក្នុងឯកសារ 
application.propertiesតែខាងយើងបានធ្វើការកែប្រែextensionរបស់ឯកសារទៅជាymlវិញ ហើយនៅក្នុងឯកសារនេះគឺត្រូវសរសេរនូវ configuration ជាមួយ H2 Database ដើម្បីអាចភ្ជាប់ទៅ H2 Database បាន។ 

- រូបភាពខាងក្រោមនេះគឺជាឯកសារដែលជា Main Application នៅក្នុងកម្មវិធី Spring Boot ហើយនៅពេលដែលអ្នកចុចប៊ូតុង ▶ ដើម្បីប្រតិបត្តិនូវកម្មវិធី។
 

- រូបភាពខាងក្រោមនេះគឺជា Console Logger ដែលកម្មវិធីត្រូវបានប្រតិបត្តិ។
 

- រូបភាពខាងក្រោមនេះគឺនៅពេលកម្មវិធីត្រូវបានប្រតិបត្តិបានជោគជ័យ បន្ទាប់មកទៅបើកមើលលទ្ធផលនៅលើ Browser។ មូលហេតុដែលវាចេញពាក្យ 
Whitelabel Error Pageគឺដោយសារតែអ្នកមិនទាន់បង្កើតនូវ Controller សម្រាប់ទំព័រមួយនេះ។ 

- រូបភាពខាងក្រោមនេះគឺនឹងនាំអ្នកទៅបង្កើតឯកសារមួយមានឈ្មោះថា TestController។
 

- ដែលនៅក្នុងឯកសារ TestController នោះគឺនឹងមានជាការបង្កើតនៅ route មួយសម្រាប់ទំព័រ 
'/testing-page'ហើយមានមុខងារមួយជាប្រភេទ Get។ 

- បន្ទាប់ពីបានបង្កើត Controller មួយរួចហើយធ្វើការប្រតិបត្តិកម្មវិធីសារជាថ្មី ហើយបន្ទាប់ពីប្រតិបត្តិបានជោគជ័យគឺទៅបើកមើលលទ្ធផលនៅទំព័រ 
'/testing-page'នឹងឃើញលទ្ធផលដូចខាងក្រោម: 

សរុបសេចក្តី
- បន្ទាប់ពីអ្នកបានសិក្សានូវជំពូកនេះចប់ អ្នកនឹងអាចបង្កើត Project Spring Boot ដោយខ្លួនឯងបាន។