Starters


Spring Boot এর সবচেয়ে শক্তিশালী এবং জনপ্রিয় ফিচারগুলোর একটি হলো — Starters। এটি এমনভাবে তৈরি করা হয়েছে যাতে তুমি খুব দ্রুত একটি Spring প্রজেক্ট শুরু করতে পারো, এক লাইনে প্রয়োজনীয় সব dependency যুক্ত হয়ে যায়।


Starter কী?

Spring Boot Starter হলো একটি pre-configured dependency bundle, যার মধ্যে সেই নির্দিষ্ট কাজের জন্য প্রয়োজনীয় সব লাইব্রেরি ও কনফিগারেশন আগে থেকেই যুক্ত থাকে।

অর্থাৎ —
- তোমাকে আর একাধিক dependency ম্যানুয়ালি খুঁজে যোগ করতে হবে না।
- শুধু একটি starter dependency যোগ করলেই Spring Boot বাকি কাজটা নিজে করে নেয়।


Starter Dependency এর Structure

একটি Starter dependency সাধারণত নিচের ফরম্যাটে থাকে:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-*</artifactId>
</dependency>

এখানে * হলো তোমার ব্যবহারের উদ্দেশ্য অনুযায়ী নাম।
যেমন: 

- spring-boot-starter-web

- spring-boot-starter-data-jpa

- spring-boot-starter-security

- spring-boot-starter-test


কিছু জনপ্রিয় Starter Dependency

Starter ব্যবহার
spring-boot-starter মূল বেসিক কনফিগারেশন (core, logging ইত্যাদি)
spring-boot-starter-web REST API ও MVC অ্যাপ তৈরি করার জন্য
spring-boot-starter-data-jpa Hibernate + JPA ডাটাবেস সাপোর্ট
spring-boot-starter-thymeleaf Server-side HTML template engine
spring-boot-starter-security Authentication ও Authorization
spring-boot-starter-test JUnit, Mockito সহ টেস্টিং ফ্রেমওয়ার্ক
spring-boot-starter-actuator Monitoring ও Health endpoint সাপোর্ট
spring-boot-starter-validation Request validation (JSR 303/380)


Step-by-Step উদাহরণ

নতুন প্রজেক্ট তৈরি করো

তুমি চাইলে Spring Initializr থেকে নিচের dependency বেছে নিতে পারো:
- Spring Web
- Spring Boot DevTools
- Spring Boot Actuator


Web Starter ব্যবহার

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

এই একটি dependency যোগ করলেই —
তুমি Spring MVC, Embedded Tomcat, Jackson (JSON), এবং Validation পেয়ে যাচ্ছো।


উদাহরণ:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello Spring Boot Starters!";
    }
}

এখন mvn spring-boot:run কমান্ড দিলে /hello এ গিয়ে রেসপন্স দেখা যাবে।


Database Starter

যদি তুমি ডাটাবেস ব্যবহার করতে চাও, তাহলে ব্যবহার করো:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

এটি স্বয়ংক্রিয়ভাবে যোগ করবে:

- Hibernate ORM

- Spring Data JPA

- Transaction Manager

এর সাথে যদি তুমি H2 Database ব্যবহার করো, তাহলে ডেভেলপমেন্টে কাজ করা আরও সহজ হবে:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>


Testing Starter

Spring Boot এ টেস্টিং করার জন্য খুব শক্তিশালী starter আছে:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

এতে JUnit 5, Mockito, Hamcrest, AssertJ — সব একসাথে পাওয়া যায়।

উদাহরণ:

@SpringBootTest
public class HelloControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void shouldReturnHello() throws Exception {
        mockMvc.perform(get("/hello"))
               .andExpect(status().isOk())
               .andExpect(content().string("Hello Spring Boot Starters!"));
    }
}


Custom Starter তৈরি (Advanced)

তুমি চাইলে নিজেও একটি custom starter বানাতে পারো। যখন একই কোড একাধিক মডিউলে ব্যবহার করতে হবে, তখন এটি কাজে আসে।


Example:

ধরা যাক তুমি নিজের লগিং মডিউল সব প্রজেক্টে ব্যবহার করতে চাও।

- নতুন Maven Module তৈরি করো
- নাম দাও — custom-logging-starter
spring.factories ফাইলে যোগ করো:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.logging.LoggingAutoConfiguration

তারপর এই starter যেকোনো প্রজেক্টে dependency হিসেবে যোগ করলেই অটো কনফিগারেশন কাজ করবে।


Spring Boot Starters এর সুবিধা

- এক লাইনে প্রয়োজনীয় সব dependency
- Version compatibility নিশ্চিত
- Auto-configuration সাপোর্ট
- দ্রুত প্রজেক্ট সেটআপ
- Maintenance কম


Best Practices

- সবসময় Spring Boot Starter ব্যবহার করো, ম্যানুয়ালি dependency যোগ কোরো না

- প্রজেক্টে অপ্রয়োজনীয় starter বাদ দাও (performance ভালো হবে)

- কাস্টম স্টার্টার বানানোর সময় শুধু reusable কোড রাখো

- Version mismatch হলে spring-boot-dependencies BOM ব্যবহার করো


স্প্রিং বুট অ্যাপ্লিকেশনের স্টার্টআপ সময় কীভাবে অপ্টিমাইজ করবেন?


  • Lazy Initialization: ব্যবহার করুন: spring.main.lazy-initialization=true, প্রয়োজন না হওয়া পর্যন্ত বিন ইনিশিয়ালাইজ হবে না
  • এনভায়রনমেন্ট  স্পেসিফিক প্রোফাইল কনফিগারেশন : অপ্রয়োজনীয় লোডিং এড়াতে প্রতি এনভায়রনমেন্ট  আলাদা কনফিগারেশন করুন
  • কম্পোনেন্ট স্ক্যানিং:  @ComponentScan এ শুধুমাত্র প্রয়োজনীয় প্যাকেজ অন্তর্ভুক্ত করে কম্পোনেন্ট স্ক্যানিংয়ের ফাইল সংখ্যা সীমিত করুন 
  • Bean  তৈরি কমানো : স্টার্টআপের সময় অপ্রয়োজনীয় বিন তৈরি করা এড়িয়ে চলুন, বিশেষ করে সময়সাপেক্ষ সার্ভিস এর  ক্ষেত্রে।