Spring Batch এবং Spring Boot Integration

Java Technologies - স্প্রিং ব্যাচ (Spring Batch)
190

স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক যা জাভাতে ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি বড় পরিমাণ ডেটা প্রক্রিয়া করার জন্য ডিজাইন করা হয়েছে, যেমন ETL (Extract, Transform, Load) প্রক্রিয়া, রিপোর্ট জেনারেশন, ডেটা মাইগ্রেশন ইত্যাদি। স্প্রিং বুট (Spring Boot) একটি ফ্রেমওয়ার্ক যা দ্রুত এবং সহজভাবে স্প্রিং অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। স্প্রিং বুট এবং স্প্রিং ব্যাচের ইন্টিগ্রেশন অনেক সুবিধা নিয়ে আসে, যেমন কনফিগারেশন হালকা করা এবং ব্যাচ প্রসেসিংয়ের জন্য প্রয়োজনীয় স্টেপস এবং জব কনফিগারেশন সহজে সম্পন্ন করা।

স্প্রিং ব্যাচ এবং স্প্রিং বুটের একত্রিত ব্যবহার অনেক ক্ষেত্রেই বিশেষভাবে উপকারী, বিশেষ করে যখন আপনাকে ডেটার বড় সেট প্রক্রিয়া করতে হয় এবং আপনি চান একটি স্কেলেবল, স্থিতিশীল এবং দ্রুত অ্যাপ্লিকেশন তৈরি করতে।

স্প্রিং ব্যাচ এবং স্প্রিং বুটের ইন্টিগ্রেশন সুবিধা

  • সহজ কনফিগারেশন: স্প্রিং বুটের অটো কনফিগারেশন স্প্রিং ব্যাচের সাথে সহজে ইন্টিগ্রেট করা যায়, যাতে কোনো জটিল XML কনফিগারেশন বা ম্যানুয়াল কনফিগারেশন করার প্রয়োজন হয় না।
  • স্ট্যান্ডঅ্যালোন অ্যাপ্লিকেশন: স্প্রিং বুটের মাধ্যমে স্প্রিং ব্যাচ একটি স্ট্যান্ডঅ্যালোন অ্যাপ্লিকেশন হিসেবে কাজ করতে পারে, যা খুব সহজে চালানো যায়।
  • সহজ টেস্টিং: স্প্রিং বুট টেস্টিং ফিচার এবং ব্যাচ ফিচার একসাথে সহজভাবে ব্যবহার করা যায়।
  • ব্যাচ জব ম্যানেজমেন্ট: স্প্রিং বুট এবং স্প্রিং ব্যাচ একত্রিতভাবে জব ম্যানেজমেন্ট, স্কেডিউলিং, এবং ব্যাচ প্রসেসিং খুবই সহজ করে তোলে।

স্প্রিং ব্যাচ এবং স্প্রিং বুটের ইন্টিগ্রেশন কনফিগারেশন

স্প্রিং বুট এবং স্প্রিং ব্যাচ একত্রিতভাবে কাজ করার জন্য আপনাকে কিছু নির্দিষ্ট কনফিগারেশন ফাইল তৈরি করতে হবে। এই কনফিগারেশনগুলি @EnableBatchProcessing এবং স্প্রিং বুটের @SpringBootApplication অ্যানোটেশন ব্যবহারের মাধ্যমে করা হয়।

১. স্প্রিং বুট অ্যাপ্লিকেশন কনফিগারেশন

স্প্রিং বুট এবং স্প্রিং ব্যাচ একত্রিত করার জন্য প্রথমে আপনাকে স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে হবে, যেখানে @EnableBatchProcessing ব্যবহার করা হবে। এটি ব্যাচ প্রসেসিংয়ের জন্য প্রয়োজনীয় কনফিগারেশন এবং ম্যানেজমেন্ট ইন্টিগ্রেশন চালু করে।

import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableBatchProcessing // Enable Spring Batch Processing
public class BatchApplication {
    public static void main(String[] args) {
        SpringApplication.run(BatchApplication.class, args);
    }
}

এখানে, @SpringBootApplication এবং @EnableBatchProcessing দুটোই স্প্রিং বুট অ্যাপ্লিকেশন শুরু করার জন্য ব্যবহার করা হয়েছে। @EnableBatchProcessing স্প্রিং ব্যাচের সব কনফিগারেশন অটোমেটিক্যালি সক্রিয় করে দেয়।

২. Job Configuration

স্প্রিং ব্যাচের জন্য একটি Job এবং Step কনফিগার করতে হবে, যেখানে আপনি ItemReader, ItemProcessor, এবং ItemWriter ব্যবহার করবেন। এটি স্প্রিং বুটের মাধ্যমে করা হবে।

import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.job.builder.JobBuilderFactory;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.Job;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BatchConfig {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
    }

    @Bean
    public Job job() {
        return jobBuilderFactory.get("myJob")
                .start(step1())
                .build();
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .<String, String>chunk(10)
                .reader(myReader())
                .processor(myProcessor())
                .writer(myWriter())
                .build();
    }

    @Bean
    public MyItemReader myReader() {
        return new MyItemReader();
    }

    @Bean
    public MyItemProcessor myProcessor() {
        return new MyItemProcessor();
    }

    @Bean
    public MyItemWriter myWriter() {
        return new MyItemWriter();
    }
}

এখানে, আমরা একটি ব্যাচ Job তৈরি করেছি এবং Step এর মাধ্যমে ItemReader, ItemProcessor, এবং ItemWriter কনফিগার করেছি। একে স্প্রিং বুট কনটেক্সটে পুরোপুরি কনফিগার করা হয়েছে, এবং ব্যাচ প্রসেসিং কার্যকরভাবে চালানো যাবে।

৩. ItemReader, ItemProcessor, এবং ItemWriter

ItemReader, ItemProcessor, এবং ItemWriter স্প্রিং ব্যাচে ব্যাচ প্রসেসিংয়ের মূল অংশ। এগুলোকে কাস্টম ক্লাস হিসেবে তৈরি করতে হবে।

ItemReader উদাহরণ:
import org.springframework.batch.item.ItemReader;

public class MyItemReader implements ItemReader<String> {
    @Override
    public String read() throws Exception {
        // Return an item (e.g., reading from a file)
        return "item";
    }
}
ItemProcessor উদাহরণ:
import org.springframework.batch.item.ItemProcessor;

public class MyItemProcessor implements ItemProcessor<String, String> {
    @Override
    public String process(String item) throws Exception {
        // Process the item (e.g., transform or filter)
        return item.toUpperCase();
    }
}
ItemWriter উদাহরণ:
import org.springframework.batch.item.ItemWriter;

import java.util.List;

public class MyItemWriter implements ItemWriter<String> {
    @Override
    public void write(List<? extends String> items) throws Exception {
        // Write processed items to a destination (e.g., console or file)
        items.forEach(System.out::println);
    }
}

এখানে, MyItemReader একটি আইটেম রিডার, MyItemProcessor একটি প্রসেসর এবং MyItemWriter একটি লেখক (writer) যা কনসোলে প্রক্রিয়া করা ডেটা প্রিন্ট করবে।

৪. Application Properties

স্প্রিং বুটের মাধ্যমে ব্যাচ কনফিগারেশনের জন্য ডেটাবেস এবং অন্যান্য প্রপার্টি কনফিগার করার জন্য application.properties ফাইল ব্যবহার করতে পারেন।

spring.batch.job.enabled=true
spring.batch.initialize-schema=always
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update

এখানে, spring.batch.job.enabled=true স্প্রিং ব্যাচ জব চালু করতে ব্যবহৃত হয় এবং spring.datasource.url এর মাধ্যমে ডেটাবেসের কনফিগারেশন করা হয়।

স্প্রিং ব্যাচ এবং স্প্রিং বুটের ইন্টিগ্রেশন এর সুবিধা

  1. সহজ কনফিগারেশন: স্প্রিং বুটের অটো কনফিগারেশন স্প্রিং ব্যাচের সাপোর্টকে সহজ করে দেয়।
  2. স্ট্যান্ডঅ্যালোন অ্যাপ্লিকেশন: স্প্রিং বুটের সাহায্যে স্প্রিং ব্যাচ একটি স্ট্যান্ডঅ্যালোন অ্যাপ্লিকেশন হিসেবে কাজ করতে পারে।
  3. কম্প্যাক্ট কোড: স্প্রিং বুটের মাধ্যমে কমপ্লেক্স কনফিগারেশন সহজভাবে হ্যান্ডেল করা সম্ভব।
  4. ডায়নামিক স্কেলিং: স্প্রিং ব্যাচ এবং স্প্রিং বুটের কম্বিনেশনে ডায়নামিক স্কেলিং সুবিধা পাওয়া যায়।

স্প্রিং ব্যাচ এবং স্প্রিং বুটের ইন্টিগ্রেশন ব্যবহার করে আপনি ডেটা প্রসেসিং, রিপোর্ট জেনারেশন, ETL প্রক্রিয়া ইত্যাদি কার্যক্রম সহজে এবং কার্যকরভাবে পরিচালনা করতে পারেন। স্প্রিং বুটের অটো কনফিগারেশন এবং স্প্রিং ব্যাচের শক্তিশালী ব্যাচ প্রসেসিং ক্ষমতা একত্রিত করে আপনি একটি পূর্ণাঙ্গ ব্যাচ প্রসেসিং অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By

Spring Boot এর সাথে Spring Batch Integration

181

স্প্রিং ব্যাচ (Spring Batch) এবং স্প্রিং বুট (Spring Boot) একসাথে ব্যবহার করা খুবই জনপ্রিয়, কারণ স্প্রিং বুটের মাধ্যমে স্প্রিং ব্যাচকে খুব সহজে কনফিগার এবং ডিপ্লয় করা যায়। স্প্রিং ব্যাচ মূলত ব্যাচ প্রসেসিং কাজ পরিচালনার জন্য ব্যবহৃত হয়, যেমন বড় পরিমাণ ডেটা পড়া, প্রক্রিয়া করা এবং লিখা, যখন স্প্রিং বুট একটি ফ্রেমওয়ার্ক যা এন্টারপ্রাইজ অ্যাপ্লিকেশন দ্রুত এবং সহজে তৈরি করতে সহায়তা করে। স্প্রিং বুটের সাথে স্প্রিং ব্যাচ ইন্টিগ্রেট করলে এটি ডেটাবেস, ফাইল এবং অন্যান্য সোর্স থেকে ডেটা প্রসেস করতে শক্তিশালী এবং স্কেলেবল সিস্টেম তৈরি করতে সাহায্য করে।

এই টিউটোরিয়ালে, আমরা স্প্রিং বুট অ্যাপ্লিকেশনের মধ্যে স্প্রিং ব্যাচ কনফিগার করব এবং একটি সিম্পল ব্যাচ কাজ তৈরি করব।


স্প্রিং বুট এবং স্প্রিং ব্যাচ ইন্টিগ্রেশন: উদাহরণ

এই উদাহরণে, আমরা একটি ব্যাচ কাজ তৈরি করব যা CSV ফাইল থেকে ডেটা পড়ে, তথ্য প্রক্রিয়া করবে, এবং ডাটাবেসে লিখবে


১. প্রয়োজনীয় ডিপেনডেন্সি

স্প্রিং বুট অ্যাপ্লিকেশনে স্প্রিং ব্যাচ কনফিগার করতে প্রথমে pom.xml ফাইলে কিছু ডিপেনডেন্সি যোগ করতে হবে।

<dependencies>
    <!-- Spring Boot Starter Batch -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- Database Driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- Spring Batch Core -->
    <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-core</artifactId>
    </dependency>
</dependencies>

এখানে, spring-boot-starter-batch স্প্রিং ব্যাচ ফিচারগুলির জন্য এবং spring-boot-starter-data-jpa ডেটাবেস ইন্টিগ্রেশনের জন্য ব্যবহৃত হয়।


২. ব্যাচ কাজ কনফিগারেশন (Batch Job Configuration)

স্প্রিং ব্যাচে একটি ব্যাচ কাজ তৈরি করতে আমরা Step এবং Job কনফিগার করব।

Step 1: Data Model (Entity) তৈরি করা

প্রথমে আমরা একটি User ডেটা মডেল তৈরি করি, যা ডেটাবেসে সেভ হবে।

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    
    @Id
    private Long id;
    private String name;
    private String email;
    private int age;

    // Getters and Setters
}

Step 2: ItemReader, ItemProcessor, এবং ItemWriter কনফিগারেশন

স্প্রিং ব্যাচে ডেটা পড়ার, প্রক্রিয়া করার এবং লেখার জন্য ItemReader, ItemProcessor, এবং ItemWriter ব্যবহার করা হয়।

  • ItemReader: ফাইল বা ডেটাবেস থেকে ডেটা পড়তে ব্যবহৃত হয়।
  • ItemProcessor: ডেটা প্রক্রিয়া করতে ব্যবহৃত হয়।
  • ItemWriter: প্রক্রিয়া করা ডেটা ডেটাবেস বা ফাইলে লেখে।
ItemReader (CSV ফাইল থেকে ডেটা পড়া)
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.core.io.ClassPathResource;

@Bean
public FlatFileItemReader<User> itemReader() {
    FlatFileItemReader<User> reader = new FlatFileItemReader<>();
    reader.setResource(new ClassPathResource("users.csv"));

    // LineTokenizer কনফিগারেশন
    DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
    tokenizer.setNames("name", "email", "age");

    // FieldSetMapper কনফিগারেশন
    FieldSetMapper<User> mapper = new BeanWrapperFieldSetMapper<>();
    mapper.setTargetType(User.class);

    reader.setLineTokenizer(tokenizer);
    reader.setFieldSetMapper(mapper);
    return reader;
}

এখানে, FlatFileItemReader ব্যবহার করা হয়েছে যা CSV ফাইল থেকে ডেটা পড়বে এবং সেটিকে User অবজেক্টে রূপান্তর করবে।

ItemProcessor (ডেটা প্রক্রিয়া করা)
import org.springframework.batch.item.ItemProcessor;

public class UserItemProcessor implements ItemProcessor<User, User> {

    @Override
    public User process(User user) throws Exception {
        user.setName(user.getName().toUpperCase()); // Name কে বড় অক্ষরে পরিণত করা
        return user;
    }
}
ItemWriter (ডেটা ডাটাবেসে লেখা)
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;

public class UserItemWriter implements ItemWriter<User> {

    @Autowired
    private UserRepository userRepository;

    @Override
    public void write(List<? extends User> items) throws Exception {
        for (User user : items) {
            userRepository.save(user);  // ডেটাবেসে সেভ করা
        }
    }
}

এখানে, UserItemWriter ক্লাসটি ডেটাবেসে ব্যবহারকারীদের সেভ করবে।

Step 3: Batch Job কনফিগারেশন

এখন আমরা Batch Job কনফিগার করব, যেটি ItemReader, ItemProcessor, এবং ItemWriter ব্যবহার করবে।

import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.Job;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BatchConfig {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Autowired
    public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
            .<User, User>chunk(10)
            .reader(itemReader()) // ItemReader
            .processor(new UserItemProcessor()) // ItemProcessor
            .writer(new UserItemWriter()) // ItemWriter
            .build();
    }

    @Bean
    public Job job() {
        return jobBuilderFactory.get("job")
            .start(step1())
            .build();
    }
}

এখানে:

  • chunk(10): প্রতি ১০টি রেকর্ডে একবার ব্যাচ প্রসেস হবে।
  • ItemReader, ItemProcessor, এবং ItemWriter ব্যাচ স্টেপে যুক্ত করা হয়েছে।

৩. স্প্রিং বুট অ্যাপ্লিকেশন চালানো

স্প্রিং বুট অ্যাপ্লিকেশন চালানোর জন্য মূল ক্লাস তৈরি করুন:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.batch.core.launch.JobParameters;
import org.springframework.batch.core.Job;

@SpringBootApplication
public class BatchApplication {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private Job job;

    public static void main(String[] args) {
        SpringApplication.run(BatchApplication.class, args);
    }

    @PostConstruct
    public void runBatchJob() throws Exception {
        jobLauncher.run(job, new JobParameters());
    }
}

এখানে, jobLauncher.run(job, new JobParameters()) দিয়ে ব্যাচ কাজ চালানো হয়।


সারাংশ

স্প্রিং ব্যাচ এবং স্প্রিং বুটের ইন্টিগ্রেশন ডেটাবেস থেকে ডেটা পড়া, প্রক্রিয়া করা এবং লেখা অনেক সহজ এবং কার্যকরী করে তোলে। আমরা এখানে CSV ফাইল থেকে ডেটা পড়া, প্রক্রিয়া করা, এবং ডাটাবেসে লেখা এর একটি ব্যাচ কাজ তৈরি করেছি। স্প্রিং বুটের সাহায্যে স্প্রিং ব্যাচ কনফিগারেশন সহজ হয় এবং এটি আপনার ব্যাচ প্রসেসিং অ্যাপ্লিকেশনকে দ্রুত ডিপ্লয় এবং পরিচালনা করার সুযোগ দেয়।

Content added By

Spring Boot Starter Batch এর ব্যবহার

159

Spring Boot Starter Batch হল Spring Boot এর একটি স্টার্টার প্যাকেজ যা Spring Batch এর সাথে সহজে কাজ করতে সহায়তা করে। এটি Spring Batch ফিচার এবং কনফিগারেশনগুলোকে Spring Boot অ্যাপ্লিকেশনের মধ্যে খুবই সহজভাবে অন্তর্ভুক্ত করতে সক্ষম। Spring Boot Starter Batch ব্যবহার করে ব্যাচ প্রসেসিং অ্যাপ্লিকেশন তৈরি করতে ডিপেনডেন্সি কনফিগারেশন এবং ইনফ্রাস্ট্রাকচার কনফিগারেশন অনেকটাই স্বয়ংক্রিয় হয়ে যায়, যা ডেভেলপারদের জন্য কাজ সহজ করে দেয়।

Spring Batch মূলত ব্যাচ প্রক্রিয়া এবং জব রান করার জন্য ব্যবহৃত হয়, যেমন বড় ডেটাসেট প্রক্রিয়া, ডাটা ম্যানিপুলেশন, ইত্যাদি। Spring Boot Starter Batch এর মাধ্যমে Spring Batch এর জব ও স্টেপ কনফিগারেশন এবং অন্যান্য ব্যাচ অপারেশন আরও দ্রুত এবং সহজে করা যায়।


Spring Boot Starter Batch সেটআপ

Spring Boot Starter Batch সেটআপ করার জন্য প্রথমে আপনার Maven বা Gradle প্রজেক্টে সঠিক ডিপেনডেন্সি যোগ করতে হবে।

Maven ডিপেনডেন্সি

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

এই ডিপেনডেন্সি Spring Batch এর জন্য প্রয়োজনীয় সমস্ত ফিচার এবং কনফিগারেশন যোগ করবে।

application.properties কনফিগারেশন

Spring Boot Starter Batch এর মাধ্যমে application.properties বা application.yml ফাইলের মাধ্যমে ব্যাচ কনফিগারেশন সহজভাবে করা যায়।

spring.batch.job.enabled=true
spring.batch.initialize-schema=always  # স্কিমা স্বয়ংক্রিয়ভাবে তৈরি হবে
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

এখানে spring.batch.initialize-schema=always এর মাধ্যমে Spring Batch এর জন্য প্রয়োজনীয় টেবিলগুলো ডাটাবেসে স্বয়ংক্রিয়ভাবে তৈরি হবে।


Spring Batch Job এবং Step কনফিগারেশন

Spring Boot Starter Batch এর মাধ্যমে Job এবং Step কনফিগারেশন খুব সহজে করা যায়। নিচে একটি উদাহরণ দেখানো হলো যেখানে Job এবং Step কনফিগার করা হয়েছে।

Step কনফিগারেশন

package com.example.demo;

import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Bean
    public Job job(JobBuilderFactory jobBuilderFactory, Step step1) {
        return jobBuilderFactory.get("job")
                .incrementer(new RunIdIncrementer())
                .flow(step1)  // Define step1
                .end()
                .build();
    }

    @Bean
    public Step step1(StepBuilderFactory stepBuilderFactory, 
                      ItemReader<String> reader, 
                      ItemProcessor<String, String> processor, 
                      ItemWriter<String> writer) {
        return stepBuilderFactory.get("step1")
                .<String, String>chunk(10)  // Define chunk size
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }
}

এখানে, JobBuilderFactory এর মাধ্যমে একটি নতুন Job তৈরি করা হয়েছে যা একটি Step নিয়ে কাজ করবে। Step কনফিগারেশন এ ItemReader, ItemProcessor, এবং ItemWriter ব্যবহার করা হয়েছে।


ItemReader, ItemProcessor এবং ItemWriter তৈরি করা

ItemReader: এই অংশটি ডাটা রিড করার জন্য ব্যবহৃত হয়, যেমন ডাটাবেস বা ফাইল থেকে।

ItemProcessor: রিড করা ডাটাকে প্রসেস করার জন্য ব্যবহৃত হয়, যেমন ফিল্টার বা কনভার্সন করা।

ItemWriter: প্রসেস করা ডাটাকে আউটপুটে লেখার জন্য ব্যবহৃত হয়, যেমন ডাটাবেস বা ফাইলে।

package com.example.demo;

import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemWriter;
import org.springframework.stereotype.Component;

@Component
public class SimpleReader implements ItemReader<String> {
    private String[] data = {"Item1", "Item2", "Item3"};
    private int index = 0;

    @Override
    public String read() throws Exception {
        if (index < data.length) {
            return data[index++];
        } else {
            return null; // End of data
        }
    }
}

@Component
public class SimpleProcessor implements ItemProcessor<String, String> {
    @Override
    public String process(String item) throws Exception {
        return item.toUpperCase();  // Convert to uppercase
    }
}

@Component
public class SimpleWriter implements ItemWriter<String> {
    @Override
    public void write(List<? extends String> items) throws Exception {
        items.forEach(System.out::println);  // Print each item to console
    }
}

এখানে, SimpleReader একটি ইন-মেমরি রিডার, SimpleProcessor ডাটাকে uppercase করে, এবং SimpleWriter সেই ডাটাকে কনসোলে লেখে।


JobLauncher দিয়ে ব্যাচ জব রান করা

Spring Boot Starter Batch ব্যবহার করে, Spring Batch জবটি চালাতে JobLauncher ব্যবহার করা হয়। CommandLineRunner বা অন্য কোনো ট্রিগার দিয়ে এটি চালানো যায়।

package com.example.demo;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class JobRunner implements CommandLineRunner {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private Job job;

    @Override
    public void run(String... args) throws Exception {
        jobLauncher.run(job, new JobParameters());
    }
}

এখানে, JobLauncher দিয়ে job চালানো হচ্ছে, যা Spring Batch জব প্রক্রিয়া শুরু করে।


Spring Boot Starter Batch এর সুবিধা

  • সহজ কনফিগারেশন: Spring Boot Starter Batch এর মাধ্যমে Spring Batch এর কনফিগারেশন অনেক সহজ হয়ে যায়, যেহেতু অনেক কনফিগারেশন অটো-এনেবল হয়ে যায়।
  • স্বয়ংক্রিয় স্কিমা ইনিশিয়ালাইজেশন: Spring Batch ডাটাবেসের জন্য প্রয়োজনীয় টেবিলগুলো স্বয়ংক্রিয়ভাবে তৈরি হয়।
  • Job এবং Step কনফিগারেশন: Spring Boot Starter Batch ব্যবহার করে Job এবং Step গুলি খুব সহজে কনফিগার করা যায়।
  • Fault Tolerance: Spring Batch এর মাধ্যমে ব্যাচ প্রক্রিয়ায় Retry এবং Skip কৌশল ব্যবহার করা যায়, যা ব্যাচ প্রসেসিং আরও নির্ভরযোগ্য করে তোলে।

সারাংশ

Spring Boot Starter Batch একটি শক্তিশালী টুল যা Spring Batch এর সাথে সহজে কাজ করতে সাহায্য করে। এটি Spring Batch এর জন্য প্রয়োজনীয় কনফিগারেশন, ডাটাবেস স্কিমা ইনিশিয়ালাইজেশন, এবং Job/Step কনফিগারেশনকে সহজ করে দেয়। Spring Batch জব এবং স্টেপ কনফিগারেশন, ItemReader, ItemProcessor, এবং ItemWriter এর মাধ্যমে ডেটা প্রক্রিয়া এবং আউটপুট লেখার কাজ অত্যন্ত সহজ এবং দ্রুত করা যায়। Spring Boot Starter Batch এর মাধ্যমে ব্যাচ প্রসেসিং অ্যাপ্লিকেশন তৈরি করা আরও দ্রুত এবং মডুলার হয়ে ওঠে।

Content added By

উদাহরণ সহ Spring Boot এবং Spring Batch প্রজেক্ট তৈরি

127

Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রক্রিয়াকরণে ব্যবহৃত হয়, যেমন বড় পরিমাণ ডেটা প্রক্রিয়া করা, ডেটা রিড এবং রাইট করা, এবং অন্যান্য ব্যাচ ভিত্তিক কাজ। Spring Boot একটি দ্রুত অ্যাপ্লিকেশন তৈরি করার জন্য ডিজাইন করা ফ্রেমওয়ার্ক। Spring Batch এবং Spring Boot একসাথে ব্যবহার করলে আপনি খুব সহজে ব্যাচ প্রক্রিয়াকরণের কাজ করতে পারেন।

এখানে একটি Spring Boot এবং Spring Batch প্রজেক্ট তৈরি করার পুরো প্রক্রিয়া উদাহরণের মাধ্যমে ব্যাখ্যা করা হবে।


1. Spring Boot এবং Spring Batch প্রজেক্ট তৈরি করা

1.1 Spring Initializr ব্যবহার করে প্রজেক্ট তৈরি করা

Spring Initializr দিয়ে Spring Batch এবং Spring Boot প্রজেক্ট তৈরি করা খুবই সহজ।

  1. Spring Initializr ওয়েবসাইটে যান: Spring Initializr
  2. Project হিসেবে Maven Project বা Gradle Project নির্বাচন করুন।
  3. Language হিসেবে Java নির্বাচন করুন।
  4. Spring Boot version নির্বাচন করুন (যেমন: 3.0.0 বা আপনার পছন্দের লেটেস্ট ভার্সন)।
  5. Dependencies হিসেবে Spring Web এবং Spring Batch নির্বাচন করুন।
  6. Generate বাটনে ক্লিক করে ZIP ফাইল ডাউনলোড করুন এবং এটি এক্সট্র্যাক্ট করুন।

এখন আপনার প্রজেক্ট তৈরি হয়ে যাবে এবং আপনি আপনার IDE (যেমন IntelliJ IDEA বা Eclipse) তে এটি ওপেন করতে পারবেন।

1.2 Maven ডিপেনডেন্সি কনফিগারেশন

এখন pom.xml ফাইলে Spring Batch এবং Spring Boot এর জন্য প্রয়োজনীয় ডিপেনডেন্সি কনফিগার করতে হবে।

<dependencies>
    <!-- Spring Boot Starter Web for web functionalities -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Batch dependency -->
    <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-core</artifactId>
    </dependency>

    <!-- Spring Boot Starter Batch for batch support -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>

    <!-- H2 Database for in-memory database (optional, for testing purposes) -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot Starter Test for testing -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

এখানে spring-batch-core Spring Batch এর জন্য প্রয়োজনীয় ডিপেনডেন্সি এবং spring-boot-starter-batch Spring Boot-এ Batch সাপোর্ট যোগ করার জন্য ব্যবহৃত হচ্ছে।

1.3 Spring Batch Configuration

Spring Batch-এ কাজ করার জন্য কিছু কনফিগারেশন সেট করতে হবে। এক্ষেত্রে Job এবং Step কনফিগারেশন করতে হবে।

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job job(JobCompletionNotificationListener listener, Step step1) {
        return jobBuilderFactory.get("myJob")
                .incrementer(new RunIdIncrementer())
                .listener(listener)
                .start(step1)
                .build();
    }

    @Bean
    public Step step1(ItemReader<MyItem> reader, ItemProcessor<MyItem, MyProcessedItem> processor, ItemWriter<MyProcessedItem> writer) {
        return stepBuilderFactory.get("step1")
                .<MyItem, MyProcessedItem>chunk(10)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }
}

এখানে:

  • @EnableBatchProcessing : Spring Batch সাপোর্ট সক্ষম করতে ব্যবহৃত হয়।
  • Job এবং Step কনফিগার করা হয়েছে, যেখানে step1 হল একটি Step এবং এটি একটি chunk(10) প্রক্রিয়া করবে।

1.4 ItemReader, ItemProcessor এবং ItemWriter

ItemReader ডেটা রিড করতে, ItemProcessor ডেটা প্রক্রিয়া করতে এবং ItemWriter ডেটা লিখতে ব্যবহৃত হয়। নিচে একটি উদাহরণ দেওয়া হলো:

ItemReader

@Bean
public ItemReader<MyItem> reader() {
    // আপনার ডেটা রিড করার লজিক এখানে
    return new MyItemReader();
}

ItemProcessor

@Bean
public ItemProcessor<MyItem, MyProcessedItem> processor() {
    return new MyItemProcessor();
}

ItemWriter

@Bean
public ItemWriter<MyProcessedItem> writer() {
    // ডেটা লেখার লজিক
    return new MyItemWriter();
}

2. Spring Boot Application Class

Spring Boot অ্যাপ্লিকেশন চালানোর জন্য মূল ক্লাস তৈরি করতে হবে, যেটি @SpringBootApplication অ্যনোটেশন দিয়ে চিহ্নিত করা হয়।

@SpringBootApplication
public class BatchApplication {
    public static void main(String[] args) {
        SpringApplication.run(BatchApplication.class, args);
    }
}

এটি Spring Boot অ্যাপ্লিকেশনটি চালু করবে।


3. ব্যাচ প্রসেসিং সম্পাদন করা

Spring Batch-এ ব্যাচ প্রসেসিং সম্পাদন করতে, আমরা একটি Job এবং Step তৈরি করেছি। এখন, ডেটা প্রক্রিয়া করা হবে এবং শেষে সেটি আউটপুট হবে।

  • Job একটি ব্যাচ প্রক্রিয়ায় একাধিক Step থেকে গঠিত হতে পারে।
  • প্রতিটি Step একটি নির্দিষ্ট কাজ যেমন ডেটা রিড, প্রক্রিয়া করা এবং রাইট করার জন্য ব্যবহৃত হয়।
  • Chunk Processing প্যাটার্ন ব্যবহৃত হয়েছে যেখানে ডেটার কিছু অংশ (Chunk) একসাথে রিড, প্রসেস এবং রাইট করা হয়।

3.1 Job Completion Listener

এখানে একটি JobCompletionNotificationListener যুক্ত করা হয়েছে, যা ব্যাচ প্রক্রিয়া শেষ হলে কিছু কাস্টম লজিক প্রয়োগ করতে সাহায্য করবে।

@Component
public class JobCompletionNotificationListener extends JobExecutionListenerSupport {

    @Autowired
    private DataSource dataSource;

    @Override
    public void afterJob(JobExecution jobExecution) {
        if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
            System.out.println("Job completed successfully!");
        } else if (jobExecution.getStatus() == BatchStatus.FAILED) {
            System.out.println("Job failed!");
        }
    }
}

4. ব্যাচ জব চালানো

আপনার অ্যাপ্লিকেশন চালানোর জন্য, নিচের কমান্ডটি ব্যবহার করতে হবে:

4.1 Maven কমান্ড (JAR তৈরি করা)

mvn clean install

এটি target ফোল্ডারে .jar ফাইল তৈরি করবে।

4.2 Spring Boot অ্যাপ্লিকেশন চালানো

java -jar target/my-batch-job.jar

এটি Spring Batch job চালু করবে এবং আপনার প্রক্রিয়া শুরু হবে।


সারাংশ

Spring Boot এবং Spring Batch এর মাধ্যমে একটি শক্তিশালী ব্যাচ প্রসেসিং অ্যাপ্লিকেশন তৈরি করা সম্ভব। আপনি Spring Initializr ব্যবহার করে Spring Batch সহ একটি প্রজেক্ট তৈরি করতে পারেন, তারপর Job, Step, ItemReader, ItemProcessor, এবং ItemWriter কনফিগার করে ব্যাচ প্রক্রিয়া সম্পন্ন করতে পারেন। Spring Batch ব্যবহারের মাধ্যমে আপনি বড় পরিমাণে ডেটা প্রক্রিয়া, বিশ্লেষণ এবং রাইট করার কাজ সহজভাবে এবং দক্ষতার সাথে করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।