Spring Boot DevTools: වේගවත් සංවර්ධනයට රහසක්! | Faster Dev with Hot Reload SC Guide

Spring Boot DevTools: වේගවත් සංවර්ධනයට රහසක්! | Faster Dev with Hot Reload SC Guide

කොහොමද යාලුවනේ! ❤️

අද අපි කතා කරන්න යන්නේ Spring Boot project එකක් කරන හැමෝටම ජීවිතේ ලේසි කරන, වැඩේ පට්ට ඉක්මනට කරගන්න උදව් වෙන නියම tool එකක් ගැන. ඒ තමයි Spring Boot DevTools.

Software Development කියන්නේ දිගින් දිගටම අලුත් දේවල් ඉගෙන ගන්න, අලුත් tools එක්ක වැඩ කරන්න පුළුවන් field එකක්. හැබැයි සමහර වෙලාවට පොඩි code change එකකට වුනත් project එක compile කරලා, restart කරලා, deploy කරලා බලන එක හරිම කරදරයක්, කාලය නාස්ති වෙන වැඩක්. විශේෂයෙන්ම Spring Boot වගේ Enterprise Level framework එකකදී මේක තවත් වැඩි වෙනවා. හරියට මගුල් ගෙදරක කැවුම් හැදුවා වගේ. එක කැවුමක් පිච්චුනොත් ආයෙත් මුල ඉඳන් හැමදේම බලන්න ඕනේ වගේ.

ඔන්න ඔය වගේ වෙලාවට තමයි DevTools කියන superhero එන්නේ අපිව බේරගන්න! 🦸‍♂️ මේක හරියට, ඔයාගේ code එකේ පොඩි change එකක් කළාම, ඔයා restart button එක press කරන්නත් කලින් project එක auto-restart වෙලා, ඔයාගේ browser එකත් refresh වෙලා result එක පෙන්නනවා වගේ දෙයක්. නියමයි නේද?

අද මේ post එකෙන් අපි Spring Boot DevTools කියන්නේ මොකක්ද? ඇයි මේක අපිට වැදගත් වෙන්නේ? කොහොමද මේක enable කරලා, use කරන්නේ? වගේ හැමදේම මුල ඉඳන් සරලව කතා කරමු.

Spring Boot DevTools: මොකක්ද මේක? 🤔

සරලවම කිව්වොත්, Spring Boot DevTools කියන්නේ Spring Boot Application එකක් Develop කරන Developersලාට තමන්ගේ productivity එක වැඩි කරගන්න පුදම කරපු utility module එකක්. මේක අපිට දෙන ප්‍රධානම වාසිය තමයි Hot Reloading සහ Live Reloading හැකියාව.

  • Hot Reloading (Auto-Restart): මේක තමයි අපේ ජීවිතේ ලේසි කරන ප්‍රධානම feature එක. ඔයාගේ project එකේ classpath එකේ තියෙන file එකක (Java class එකක්, properties file එකක්, HTML file එකක් වගේ) මොකක් හරි change එකක් කරලා save කළාම, DevTools එක automatically ඔයාගේ application එක restart කරනවා. සාමාන්‍යයෙන් restart කරන්න ගතවෙන කාලය මේකෙන් ගොඩක් අඩු වෙනවා, මොකද මේක කරන්නේ optimized way එකකින්. හරියට, ඔයාගේ කඩේට බඩු ගේනකොට, අවශ්‍ය දේවල් විතරක් ඉක්මනට ගෙනත් දෙනවා වගේ.
  • Live Reloading (Browser Refresh): මේකත් නියම feature එකක්. ඔයා HTML, CSS, JavaScript වගේ static resources වල change එකක් කළාම, මේක ඔයාගේ browser එක automatically refresh කරනවා. ඒ කියන්නේ, ඔයාට browser එකට ගිහින් F5 ඔබන්න අවශ්‍ය නැහැ. Front-end එකේ වැඩ කරනකොට මේක ගොඩක් වටිනවා.
  • Disable Caching: සාමාන්‍යයෙන් Spring Boot applications වල caching technologies (Thymeleaf, FreeMarker, Hibernate, etc.) use කරනවා performance වැඩි කරගන්න. හැබැයි development කරනකොට මේ caching එක නිසා අපිට කරදර වෙන්න වෙනවා. මොකද අපේ අලුත් changes හරියට පේන්නේ නැහැ. DevTools enable කරාම මේ caching එක automatically disable වෙනවා, ඒ නිසා අපේ අලුත් changes අනිවාර්යෙන්ම පේනවා.
  • Automatic Trigger for Livereload: අපි මේකෙන් browser refresh කරන්න අවශ්‍ය නෑ කියලා කිව්වනේ. ඒකට DevTools වලට තියෙනවා LiveReload server එකක්. මේක default port 35729 එකේ run වෙනවා. මේක detect කරනවා changes, ඊට පස්සේ ඒ changes වලට අනුව browser එක refresh කරනවා. හැබැයි මේකට browser extension එකක් install කරන්න වෙනවා. (Chrome, Firefox වගේ browser වලට LiveReload extensions තියෙනවා.)

ඉතින් මේ features ටිකෙන් අපිට පුළුවන් වේගයෙන්, කිසිම බාධාවකින් තොරව අපේ application එක develop කරන්න. කාලය ඉතිරි වෙනවා, productivity එක වැඩි වෙනවා.

DevTool: ඇයි අපිට මේක අත්‍යවශ්‍ය වෙන්නේ? (වෙනස කුමක්ද?) 🤔

නැවතත් අපි මුලින් කතා කරපු පොඩි code change එකක් කරද්දී මුහුණ දෙන අභියෝගය ගැන කතා කරමු. හිතන්න ඔයා Spring Boot REST API එකක් develop කරනවා කියලා. පොඩි parameter නමක්, හෝ response message එකක් වෙනස් කරන්න ඕනේ. සාමාන්‍යයෙන්, ඔයාට මේක කරන්න වෙන්නේ:

  1. Code එක වෙනස් කරනවා.
  2. Project එක rebuild කරනවා (Maven clean install, Gradle build).
  3. Application එක stop කරනවා.
  4. Application එක restart කරනවා.
  5. Browser එක refresh කරනවා, Postman එකෙන් request එකක් ගහලා බලනවා.

මේ process එකට විනාඩි ගාණක් යන්න පුළුවන්, ඔයාගේ project එකේ size එක අනුව. දවසකට මේක පාරවල් සිය ගාණක් කරන්න වුනොත්? හිතන්නකෝ කොච්චර වෙලාවක් නාස්ති වෙනවද කියලා? මේකෙන් වෙන්නේ ඔයාගේ focus එක කැඩෙන එක, වැඩේ අතපසු වෙන එක. හරියට, ගෙදරට කෑම හදනකොට හැම වෙලේම ළිප නිවලා ආයෙත් පත්තු කරනවා වගේ වැඩක්.

DevTools මෙතනදී තමයි රජා වෙන්නේ. උඩ කියපු step 2 ඉඳන් 5 වෙනකන් තියෙන වැඩ ඔක්කොම DevTools බලාගන්නවා. ඔයාට තියෙන්නේ code එක වෙනස් කරලා save කරන්න විතරයි. Application එක automatically restart වෙයි, Browser එක automatically refresh වෙයි (LiveReload extension එක දාලා තියෙනවා නම්). මේකෙන් ඔයාට code කරන එක ගැන විතරක් හිතන්න පුළුවන්, නැතුව compile කරන එක, restart කරන එක ගැන නෙවෙයි. හරියට ඔයාගේ assistant කෙනෙක් ඉන්නවා වගේ.

මේකෙන් Developer productivity එක විශාල වශයෙන් වැඩි වෙනවා. දවසට පැය කිහිපයක් ඉතිරි කරගන්න පුළුවන්. ඒ ඉතිරි වෙන වෙලාවෙන් ඔයාට පුළුවන් project එකේ අලුත් features develop කරන්න, bugs fix කරන්න, නැත්නම් පොඩි break එකක් අරන් coffee එකක් බොන්න. ☕

DevTools Enable කරලා භාවිතා කරන්නේ කොහොමද? (ප්‍රායෝගික උදාහරණයක්) 🛠️

Spring Boot DevTools activate කරන එක හරිම ලේසියි. අපි බලමු පියවරෙන් පියවර මේක කරගන්නේ කොහොමද කියලා.

පියවර 1: Dependency එක එකතු කරගන්න

ඔයාගේ Maven project එකක් නම් `pom.xml` එකට මේ dependency එක එකතු කරන්න. Gradle project එකක් නම් `build.gradle` එකට අදාළ dependency එක එකතු කරන්න.

Maven (pom.xml)

<dependencies>
    <!-- Other dependencies -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
</dependencies>

අපි මේකේ `scope` එක `runtime` විදිහට දාන්නේ, මේක production environment එකට යන්න අවශ්‍ය නැති නිසා. Development වලට විතරයි මේක අවශ්‍ය වෙන්නේ. `optional` කියන්නේ, මේ dependency එක project එක build කරද්දී inherit වෙන්නේ නැහැ කියන එක.

Gradle (build.gradle)

dependencies {
    // Other dependencies
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
}

Gradle වලදී `developmentOnly` configuration එකෙන් auto-configure වෙනවා, ඒක build output එකට add වෙන්නේ නෑ කියලා. මේක තමයි වඩාත් හොඳම ක්‍රමය.

පියවර 2: IDE Setup (අනිවාර්යයි!)

මේක තමයි DevTools වල Hot Reloading feature එක වැඩ කරන්න නම් අනිවාර්යයෙන්ම කරන්න ඕන දේ. ඔයාගේ IDE (IntelliJ IDEA, Eclipse, VS Code) එකට කියන්න ඕනේ ඔයා code එකේ changes කරද්දී automatically project එක build කරන්න කියලා.

IntelliJ IDEA වලදී:

  1. File > Settings (Mac වල නම් IntelliJ IDEA > Preferences) වලට යන්න.
  2. Build, Execution, Deployment > Compiler වලට ගිහින් "Build project automatically" කියන option එක enable කරන්න.

ඊට පස්සේ Advanced Settings වලට ගිහින් "Allow auto-make to start even if developed application is currently running" කියන option එකත් enable කරන්න. (මේක නැතුව DevTools හරියට වැඩ කරන්නේ නෑ)

IntelliJ DevTools Settings Example

(සටහන: Image එකක් මෙතනට දාන්න බැරි නිසා මම placeholder එකක් දැම්මා. ඔයාට පුළුවන් මේක screenshot එකකින් replace කරන්න.)

Eclipse වලදී:

  1. Window > Preferences වලට යන්න.
  2. General > Workspace වලට ගිහින් "Build automatically" කියන option එක enable කරන්න.

පියවර 3: DevTools ක්‍රියාත්මකදැයි පරීක්ෂා කිරීම (A Simple Example)

දැන් අපි පොඩි Spring Boot application එකක් හදලා DevTools වැඩ කරනවද කියලා බලමු.

මුලින්ම, simple REST Controller එකක් හදමු:

// src/main/java/com/example/demo/HelloController.java
package com.example.demo;

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, DevTools Sri Lanka! 🇱🇰 This is version 1.";
    }
}

දැන් ඔයාගේ Spring Boot application එක run කරන්න. (IDE එකෙන් run කරන්න, නැත්නම් `mvn spring-boot:run` command එක use කරන්න.)

Application එක start වුනාට පස්සේ, ඔයාගේ browser එකේ `http://localhost:8080/hello` වලට ගිහින් බලන්න. "Hello, DevTools Sri Lanka! 🇱🇰 This is version 1." කියලා පෙනෙයි.

දැන් ආපහු `HelloController.java` file එකට ගිහින්, `sayHello()` method එකේ return වෙන String එක පොඩ්ඩක් වෙනස් කරන්න. උදාහරණයක් විදිහට:

// src/main/java/com/example/demo/HelloController.java
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "ආයුබෝවන්, DevTools Sri Lanka! Hot Reloading works! 🚀 This is version 2."; // මේ line එක වෙනස් කරන්න
    }
}

දැන් මේ file එක save කරන්න. ඔයාගේ console එක පැත්තට බලන්න. ඔයාට පෙනෙයි Spring Boot application එක automatically restart වෙනවා, ඒ වගේම "Restarting main application" වගේ message එකක් print වෙනවා. සාමාන්‍ය restart එකට වඩා වේගයෙන් මේක සිද්ධ වෙනවා.

දැන් ආපහු browser එකේ `http://localhost:8080/hello` වලට ගිහින් refresh කරන්න. (LiveReload extension එක දාලා තියෙනවා නම් refresh කරන්න අවශ්‍ය වෙන්නේ නෑ). ඔයාට පෙනෙයි "ආයුබෝවන්, DevTools Sri Lanka! Hot Reloading works! 🚀 This is version 2." කියලා අලුත් message එක.

නියමයි නේද? මේක තමයි Hot Reloading වල බලය! පොඩි වෙනසකටත් restart කර කර ඉන්න අවශ්‍ය නැහැ.

අමතර Configuration (application.properties)

DevTools වලට අමතර configurations කරන්නත් පුළුවන්. මේවා `src/main/resources/application.properties` file එකට එකතු කරන්න පුළුවන්.

Custom restart triggers: DevTools එක changes detect කරන්නේ classpath එකේ තියෙන files වලට. ඔයාට මේක custom කරන්නත් පුළුවන්.

spring.devtools.restart.additional-paths=/path/to/another/folder

මේකෙන් කියන්නේ, /path/to/another/folder එකේ තියෙන files වලත් changes detect කරන්න කියලා.

Restart වෙන්න ඕන නැති resources specify කරන්න: සමහර වෙලාවට static files (CSS, JS) වගේ දේවල් වෙනස් කරද්දී application එක restart වෙන්න ඕන වෙන්නේ නෑ. ඒ වගේ වෙලාවට මේවා exclude කරන්න පුළුවන්.

spring.devtools.restart.exclude=static/**,public/**

මේකෙන් කියන්නේ `static` සහ `public` කියන folders වල තියෙන files වෙනස් වුනොත් application එක restart කරන්න එපා කියලා. (මේක `classpath` relative path එකක්)

Live Reload disable කරන්න: Browser auto-refresh එක අවශ්‍ය නැත්නම්.

spring.devtools.livereload.enabled=false

Restarting disable කරන්න: ඔයාට restart feature එක අවශ්‍ය නැත්නම්, මේක disable කරන්න පුළුවන්.

spring.devtools.restart.enabled=false

වැඩිදුර ඉඟි සහ උපදෙස් ✨

  • Fast Startup: DevTools වලට වඩා වේගවත් restart experience එකක් දෙන්න පුළුවන් වුනත්, සමහර වෙලාවට project එක ලොකු වෙනකොට startup time එක වැඩි වෙන්න පුළුවන්. ඒකට Docker containers, JRebel වගේ tools explore කරන්නත් පුළුවන්. හැබැයි DevTools තමයි free වගේම beginner friendly.
  • Always use it in Development: ඔයා Spring Boot project එකක් කරද්දී, අනිවාර්යයෙන්ම DevTools add කරගන්න. මේක ඔයාගේ කාලය වගේම ඔයාගේ සිතේ සාමයත් ඉතිරි කරනවා. 🧘

Remote DevTools: ඔයාට production environment එකක DevTools enable කරන්න පුළුවන්. හැබැයි මේක ගොඩක් risky. Security risks තියෙන නිසා careful වෙන්න ඕනේ. සාමාන්‍යයෙන් development වලට විතරයි මේක use කරන්නේ.

spring.devtools.remote.secret=mysecretkey
spring.devtools.remote.restart.enabled=true

මේවා සාමාන්‍යයෙන් භාවිතා කරන්නේ නැහැ. Production වලට කිසිසේත් සුදුසු නැහැ. ඒ ගැන මේ article එකේදී ගොඩක් ගැඹුරට කතා කරන්නේ නෑ.

අවසන් වදන්: අපි කලින්ට වඩා වේගවත්! 🚀

අද අපි Spring Boot DevTools ගැන ගොඩක් දේවල් කතා කළා. මේක කොච්චර වටිනවද කියලා දැන් ඔයාලට තේරෙනවා ඇති. Development process එක වේගවත් කරලා, productivity එක වැඩි කරලා, code කරන එක තවත් පහසු කරන මේ tool එක නැතුව Spring Boot project එකක් කරනවා කියන්නේ, බස් එකේ යනකොට රේඩියෝ එකේ සින්දු අහන්නේ නැතුව යනවා වගේ වැඩක්. 🚌🎧

අනිවාර්යයෙන්ම ඔයාගේ ඊළඟ Spring Boot project එකේදී DevTools add කරලා බලන්න. ඔයාට විශාල වෙනසක් තේරෙයි. ඒ වගේම, ඔයා මේ tool එක භාවිතා කරලා තියෙනවා නම්, ඔයාගේ අත්දැකීම් මොන වගේද කියලා පහළින් comment එකක් දාන්න අමතක කරන්න එපා. මොකද ඔයාගේ අත්දැකීම් තවත් කෙනෙක්ට ගොඩක් වටිනවා.

තවත් මේ වගේ useful topic එකකින් හමුවෙමු! Good Luck! Happy Coding! 👋