Spring Boot හැඳින්වීම | Java Development වේගවත් කරන Bootstrap

ඉතින් කොහොමද යාලුවනේ! අපි අද කතා කරන්න යන්නේ Java ලෝකයේ ගොඩක් දෙනෙක්ගේ වැඩ කටයුතු පහසු කරපු, development speed එක වැඩි කරපු නියම Tool එකක් ගැන. ඒ තමයි Spring Boot.
ඔයාලා Java වලින් Web Applications හදනවා නම්, නැත්නම් Microservices ගැන ඉගෙන ගන්නවා නම්, Spring Framework එක ගැන අහලා ඇති. ඒක Java ecosystem එකේ ගොඩක් බලවත් Framework එකක්. හැබැයි, ඒකෙන් Project එකක් පටන් ගන්න එකයි, manage කරන එකයි ටිකක් කරදරකාරී වැඩක් කියලා ගොඩක් දෙනෙක්ට දැනෙන්න ඇති. Configuration files, XML files, Bean Definitions කියලා හුඟක් දේවල් customize කරන්න වෙනවා. සමහර වෙලාවට වැඩේ පටන් ගන්න කලින්ම එපා වෙනවා නේද?
ඔන්න ඕකයි කතාව! මේ හැම ප්රශ්නයකටම උත්තරේ තමයි Spring Boot. මේක Spring Framework එකේම, ඒත් "අපි මේ දේවල් මෙහෙම කරමු!" කියලා Opinionated view එකක් දීලා, Development එක වේගවත් කරන, Configuration කරදර අඩු කරන සුපිරි විසඳුමක්. අද අපි මේ Spring Boot කියන්නේ මොකක්ද, ඇයි මේක මේ තරම් ජනප්රිය වුණේ, ඒ වගේම මේකේ තියෙන ප්රධාන Features මොනවද කියලා සරලව තේරුම් ගමු.
Spring Boot කියන්නේ මොකක්ද? (සරලව තේරුම් ගමු!)
සරලවම කිව්වොත්, Spring Boot කියන්නේ Spring Framework එක භාවිතයෙන් Standalone, Production-ready Spring Applications පහසුවෙන් හදන්න පුළුවන් කරන Project එකක්. වැදගත්ම දේ තමයි, මේක අලුත්ම Framework එකක් නෙමෙයි. මේක Spring Framework එකේම Extension එකක්, නැත්නම් ඒකත් එක්ක වැඩ කරන්න හදපු Helper Library එකක් වගේ දෙයක්.
මේකේ ප්රධාන අරමුණ වෙන්නේ "Convention over Configuration" කියන සංකල්පය. ඒ කියන්නේ, සාමාන්යයෙන් Project එකක් හදද්දී ගොඩක් වෙලාවට කරන පොදු දේවල් (Common configurations) Spring Boot විසින් ස්වයංක්රීයව (Automatically) හඳුනාගෙන configure කරනවා. ඒ නිසා අපිට boilerplate code ලියන්න වෙනවා අඩුයි, Configuration files එක්ක පොරබදින්න වෙනවා අඩුයි. හිතාගන්න පුලුවන්නේ, කොච්චර වෙලාවක් ඉතිරි වෙනවද කියලා!
ඔයාට පුළුවන් මේකෙන් Microservices, REST APIs, Web Applications, Batch Applications වගේ ඕනෑම ආකාරයක Spring Application එකක් හදන්න. ඒ වගේම, මේවාට External Web Servers (ඒ කියන්නේ Tomcat, Jetty වගේ Servers) අවශ්ය වෙන්නේ නැහැ. මොකද, Spring Boot වලට ඒවා Built-in එනවා. ඒක නියමයි නේද? Project එක build කරලා Run කරන්න විතරයි තියෙන්නේ.
ඇයි මේ Spring Boot ආවේ? (පැරණි ප්රශ්නවලට අලුත් විසඳුම්!)
දැන් අපි බලමු ඇයි මේ Spring Boot කියන එකට මෙච්චර Request එකක් ආවේ කියලා. Spring Framework එක ගොඩක් Powerful වුණාට, සමහර ප්රශ්න තිබුණා. ඔන්න ඒවා:
- Complex Configuration: Spring Framework එකේ Project එකක් පටන් ගද්දී Maven හෝ Gradle dependencies එකතු කරන්න ඕනේ. ඊට පස්සේ Spring beans configure කරන්න XML files හරි Java-based configuration හරි ගොඩක් ලියන්න වෙනවා. මේ හැමදේම හරියට තේරුම් අරගෙන, හරියට configure කරන එක ආරම්භක Developer කෙනෙක්ටනම් ලොකු අභියෝගයක්.
- Boilerplate Code: එකම දේවල් නැවත නැවත ලියන්න වෙනවා. උදාහරණයක් විදියට Web Application එකකට Database connect කරනවා නම්, Database connection pool එක, Transaction management, ORM framework (like Hibernate) integration වගේ දේවල් වලට වෙන වෙනම Configuration ලියන්න වෙනවා.
- Deployment Challenges: සාමාන්ය Spring Applications WAR files විදියට Build කරලා External Web Servers (Tomcat, JBoss, WebSphere වගේ) වල Deploy කරන්න ඕනේ. මේකට Server එක Set up කරන්න, Maintain කරන්න වෙනම වෙලාවක් යනවා. ඒ වගේම, CI/CD pipelines හදනකොටත් මේක අමතර පියවරක්.
- Dependency Management: Project එකට අවශ්ය libraries එකතු කරද්දී, ඒවායේ versions එකිනෙකට ගැළපෙන විදියට තෝරගන්න එක ලොකු වැඩක්. එක library එකක version එකක් අවුල් වුණොත්, whole Project එකම crash වෙන්න පුළුවන්.
මේ වගේ ප්රශ්න නිසා, Developers ලට වැඩි කාලයක් ගියේ Project එකේ Core Logic එක develop කරනවාට වඩා, Project setup කරන එකයි, Configuration කරන එකයි, Dependencies manage කරන එකයි වගේ දේවල් වලට. ඔන්න මේ ප්රශ්න විසඳන්නයි Spring Boot කියන Concept එක ආවේ. මේකෙන් අපිට පුළුවන් ඉක්මනින්ම "Project එකේ Core Logic එක" ගැන හිතන්න පටන් ගන්න.
Spring Framework එකට වඩා Spring Boot හොඳ ඇයි? (විශේෂ වාසි ටිකක්!)
දැන් අපි බලමු Spring Boot පාවිච්චි කරන එකෙන් අපිට ලැබෙන විශේෂ වාසි මොනවද කියලා:
- සරල Configuration (Configuration නැති තරම්!): Spring Boot වල ප්රධානම වාසියක් තමයි Auto-configuration. ඒ කියන්නේ, ඔයාගේ Project එකේ Classpath එකේ තියෙන Libraries අනුව, Spring Boot එකෙන් අවශ්ය Configuration ටික Auto-configure කරනවා. උදාහරණයක් විදියට, ඔයා Classpath එකට H2 Database library එකක් දැම්මොත්, Spring Boot එකෙන් H2 Database එකට අවශ්ය Configuration ටික Automatically හදලා දෙනවා. අපිට XML හරි Java Configuration ලියන්න ඕනේ නැහැ.
- වේගවත් Development (කාලය ඉතිරි කරගමු!): Boilerplate code අඩු වීම සහ Auto-configuration නිසා Project එකක් ආරම්භ කරන එකයි, Feature එකක් develop කරන එකයි ගොඩක් වේගවත් වෙනවා. Developers ලට පුළුවන් වැඩි කාලයක් Application Logic එක ගැන හිතන්න, Configuration ගැන හිතනවාට වඩා.
- Embedded Servers (Deployment කරදර නැහැ!): Spring Boot Applications වලට Tomcat, Jetty, නැත්නම් Undertow වගේ Web Servers Built-in එනවා. ඒ කියන්නේ, ඔයාට පුළුවන් Project එක .jar file එකක් විදියට Build කරලා,
java -jar your-app.jar
කියලා Run කරන්න. වෙනම Application Server එකක් Install කරන්න, Configure කරන්න, Deploy කරන්න ඕනේ නැහැ. මේක Production environment එකට Deploy කරන එකත් ගොඩක් පහසු කරනවා. - Starter Dependencies (Dependency Management හරිම ලේසියි!): Spring Boot වල තියෙන "Starters" කියන Concepts එකෙන් Dependency Management හරිම සරල කරලා තියෙනවා. උදාහරණයක් විදියට, ඔයාට Web Application එකක් හදන්න ඕනේ නම්,
spring-boot-starter-web
කියන Dependency එක එකතු කළාම ඇති. ඒකෙන් Web Development වලට අවශ්ය හැම Library එකක්ම (Spring MVC, Tomcat, Jackson JSON library වගේ දේවල්) එකපාරටම Add වෙනවා. ඒවගේ Versions ගැටළුත් අවම වෙනවා. - Production-ready Features (තව මොනවද ඕනේ?): Spring Boot වලට Application එක Production environment එකකදී Monitor කරන්න, Manage කරන්න අවශ්ය Features (Actuator වගේ) Built-in එනවා. ඒ වගේම Externalized Configuration (එනම්, Application එකේ Configurations වෙනම files වල තියාගෙන අවශ්ය විදියට වෙනස් කිරීමේ හැකියාව) වගේ දේවලුත් මේකේ තියෙනවා.
Spring Boot වල ප්රධාන Features (අපි බලමු මොනවද තියෙන්නේ කියලා!)
දැන් අපි Spring Boot වල තියෙන ප්රධාන Features ටිකක් විස්තරාත්මකව බලමු:
1. Auto-configuration
මේක Spring Boot වල හදවත වගේ. ඔයාගේ Project එකේ classpath එකේ තියෙන jars, beans, සහ configuration එක අනුව, Spring Boot එකෙන් "ඔයාට මේ දේවල් ඕනේ ඇති" කියලා අනුමාන කරලා, ඒවාට අවශ්ය configurations automcatically generate කරනවා. උදාහරණයක් විදියට, ඔයා Project එකට Spring Data JPA සහ H2 database එකතු කළොත්, Spring Boot එකෙන් datasource configuration එක, Entity ManagerFactory එක වගේ දේවල් Automatically හදලා දෙනවා. අපිට කරන්න තියෙන්නේ ඒවා පාවිච්චි කරන එක විතරයි. මේක වෙන්නේ @ConditionalOnClass
, @ConditionalOnMissingBean
වගේ Annotations පාවිච්චි කරලා.
2. Spring Boot Starters
මේවා තමයි "Dependency Descriptors" කියලා හඳුන්වන්නේ. ඔයාට Application එකකදී ඕන වෙන Common Dependencies ටිකක් එකට Group කරලා තියෙන්නේ මේ Starter වල. උදාහරණයක් විදියට:
spring-boot-starter-web
: Web Applications හදන්න අවශ්ය dependencies (Spring MVC, Tomcat, RESTful features).spring-boot-starter-data-jpa
: JPA (Java Persistence API) භාවිතයෙන් databases එක්ක වැඩ කරන්න අවශ්ය dependencies (Hibernate, Spring Data JPA).spring-boot-starter-test
: Testing වලට අවශ්ය libraries (JUnit, Mockito, Spring Test).
මේ Starters පාවිච්චි කරන එකෙන් අපි manually එක එක Library වල versions හොය හොයා එකතු කරන එක නවතින්නවා. ඒ වගේම, මේ Starters වල Versions එකට ගැළපෙන විදියට තියෙන නිසා Dependency Conflicts ඇතිවෙනවා අඩුයි.
3. Embedded Servers
ඉස්සර අපි Web Applications deploy කරන්න Tomcat, JBoss වගේ External Servers හොය හොයා Install කළා. හැබැයි Spring Boot එක්ක ඒ කරදර නැහැ. Tomcat, Jetty, නැත්නම් Undertow වගේ Servers Spring Boot Application එක ඇතුලෙන්ම එනවා. මේක නිසා අපිට Application එක Standalone executable JAR එකක් විදියට Build කරලා, ඕනෑම Java Runtime Environment (JRE) එකක් තියෙන තැනක Run කරන්න පුළුවන්. DevOps pipelines වලටත් මේක ලොකු පහසුවක්.
4. Spring Boot Actuator
Application එක Production environment එකක Run වෙනකොට ඒකේ Health, Metrics, Environment properties වගේ දේවල් Monitoring කරන්න මේ Actuator කියන Feature එක උපකාරී වෙනවා. Actuator endpoints හරහා අපිට Application එකේ තොරතුරු REST APIs විදියට expose කරන්න පුළුවන්. උදාහරණයක් විදියට /actuator/health
එකෙන් Application එක හොඳට වැඩ කරනවද කියලා බලන්න පුළුවන්, /actuator/metrics
එකෙන් Performance Metrics බලන්න පුළුවන්. මේක ලොකු Applications Manage කරන අයට හරිම වැදගත්.
Spring Boot වලින් Project එකක් පටන් ගන්නේ කොහොමද? (ප්රායෝගිකව කරලා බලමු!)
Spring Boot වලින් Project එකක් පටන් ගන්න එක හිතනවාට වඩා ගොඩක් ලේසියි. මේක කරන්න හොඳම විදිය තමයි Spring Initializr කියන Web Tool එක පාවිච්චි කරන එක. ඔයාට කරන්න තියෙන්නේ මේ ටිකයි:
start.spring.io
කියන Site එකට යන්න.- එතනදි ඔයාගේ Project එකට අවශ්ය Build Tool (Maven/Gradle), Language (Java, Kotlin, Groovy), Spring Boot Version එක තෝරන්න.
- Project Metadata (Group, Artifact, Name, Description, Package Name) ටික පුරවන්න.
- අන්තිමට "Dependencies" කියන කොටසෙන් ඔයාගේ Project එකට අවශ්ය Starters ටික තෝරන්න. උදාහරණයක් විදියට Web Application එකක් හදනවා නම් "Spring Web" කියන එක තෝරන්න. Database එකක් ඕනේ නම් "Spring Data JPA" සහ "H2 Database" (Testing වලට) තෝරන්න.
- "Generate" button එක click කරන්න.
දැන් ඔයාට Zip file එකක් Download වෙයි. ඒක Extract කරලා, ඔයාගේ IDE (IntelliJ IDEA, VS Code, Eclipse වගේ) එකකින් Open කරන්න. ඔයාට YourApplicationNameApplication.java
වගේ Main Class එකක් පෙනෙයි. ඒකේ main
method එක Run කරාම ඔයාගේ Spring Boot Application එක Start වෙනවා!
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyProjectApplication {
public static void main(String[] args) {
SpringApplication.run(MyProjectApplication.class, args);
}
}
දැන් ඔයාට පුළුවන් application.properties
(හෝ application.yml
) file එකේ Application එකට අදාළ Properties (like server.port
) configure කරන්න. ඒ වගේම, Controller classes හදලා REST Endpoints expose කරන්නත් පුළුවන්.
package com.example.myproject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
මේ වගේ සරලව Project එකක් Start කරගන්න පුළුවන් වීම තමයි Spring Boot වල ලොකුම වාසියක්. ඊට පස්සේ ඔයාට අවශ්ය විදියට Project එක Expand කරගෙන යන්න පුළුවන්.
නිගමනය (ඉතින් මොකද හිතන්නේ?)
අද අපි Spring Boot කියන්නේ මොකක්ද, ඒකේ ඉතිහාසය, සාම්ප්රදායික Spring Framework එකට වඩා ඒක හොඳ ඇයි, ඒ වගේම ඒකේ ප්රධාන Features මොනවද කියලා ගොඩක් විස්තරාත්මකව කතා කළා. Spring Boot කියන්නේ Java Developers ලාට "Fast track" එකක් වගේ. මේකෙන් Development process එකේ තිබුණ කරදරකාරී දේවල් ගොඩක් නැති කරලා, අපිට Core Logic එක ගැන අවධානය යොමු කරන්න අවස්ථාව දෙනවා.
ඔයා Java Development වලට අලුත් කෙනෙක් වුණත්, නැත්නම් දැනටමත් Spring Framework එකත් එක්ක වැඩ කරන කෙනෙක් වුණත්, Spring Boot ඉගෙන ගන්න එක අද කාලේ තියෙන Software Industry එකේදී හරිම වැදගත්. Microservices වලට වුණත් මේක තමයි ගොඩක් වෙලාවට Preferred choice එක.
ඉතින්, මම ඔයාලට suggest කරනවා මේ ගැන තව දුරටත් කියවන්න කියලා. Spring Boot Official Documentation එක කියවන්න පටන් ගන්න, ඒ වගේම YouTube වල තියෙන Good Tutorials ටිකක් බලන්න. ඒ වගේම, start.spring.io
එකට ගිහින් පොඩි Project එකක් Generate කරලා, ඒක Run කරලා බලන්න. එතකොට ඔයාලටම තේරෙයි මේකේ පහසුව.
මේ Article එක ගැන ඔයාලගේ අදහස්, ප්රශ්න පහළින් Comment කරන්න. අපි තවත් මේ වගේ වැදගත් Topics එක්ක හම්බවෙමු! සුබ දවසක්!