উদাহরণ সহ Spring Batch Architecture

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

309

স্প্রিং ব্যাচ (Spring Batch) একটি ফ্রেমওয়ার্ক যা বড় পরিমাণে ডেটা প্রোসেসিংয়ের জন্য ব্যবহৃত হয়। এটি বিশেষভাবে ব্যাচ প্রসেসিং, যেমন ডেটা মাইগ্রেশন, ডেটা ট্রান্সফরমেশন এবং ডেটা লোডিং, ইত্যাদির জন্য উপযুক্ত। স্প্রিং ব্যাচ একটি মডুলার আর্কিটেকচার ব্যবহার করে, যা অনেক কমপোনেন্ট দিয়ে গঠিত এবং এগুলো একে অপরের সাথে ইন্টিগ্রেটেডভাবে কাজ করে। স্প্রিং ব্যাচের আর্কিটেকচার মূলত তিনটি প্রধান অংশে বিভক্ত: Job, Step, এবং ItemProcessor

এখানে আমরা স্প্রিং ব্যাচের আর্কিটেকচার এবং এর গুরুত্বপূর্ণ কম্পোনেন্টগুলো উদাহরণের মাধ্যমে বিশ্লেষণ করবো।


স্প্রিং ব্যাচ আর্কিটেকচারের প্রধান কম্পোনেন্টগুলো

স্প্রিং ব্যাচের আর্কিটেকচারে মূলত নিচের কম্পোনেন্টগুলো থাকে:

  1. Job: এটি একটি ব্যাচ প্রসেসিং কাজের ইউনিট। একটি Job একটি বা একাধিক Step নিয়ে গঠিত, এবং প্রতিটি Step একটি নির্দিষ্ট কাজ সম্পন্ন করে।
  2. Step: Step হলো ব্যাচ প্রসেসিংয়ের একক কার্যক্রম। এটি বিভিন্ন ধাপে বিভক্ত হতে পারে, যেমন রিডিং (reading), প্রসেসিং (processing), এবং রাইটিং (writing)।
  3. ItemReader: এটি ডেটা রিডিংয়ের জন্য ব্যবহৃত হয়, অর্থাৎ একটি সিঙ্গেল আইটেম বা ডেটা সোর্স থেকে এক্সট্র্যাক্ট করা হয়।
  4. ItemProcessor: এটি ডেটার উপর কোনো প্রক্রিয়া বা ট্রান্সফরমেশন সম্পন্ন করে।
  5. ItemWriter: এটি প্রক্রিয়াকৃত ডেটাকে কোথাও (যেমন ডেটাবেস, ফাইল) লিখে রাখে।
  6. JobLauncher: এটি একটি Job শুরু করার জন্য ব্যবহৃত হয়।

স্প্রিং ব্যাচের কাজের প্রক্রিয়া সাধারণত নিচের রূপে কাজ করে:

  1. Job তৈরি করা হয়, যা এক বা একাধিক Step নিয়ে গঠিত।
  2. প্রতিটি Step একটি নির্দিষ্ট কাজ সম্পন্ন করে, যেমন ডেটা রিড, প্রসেস এবং রাইট।
  3. ItemReader ডেটা রিডিং করে, ItemProcessor ডেটা প্রসেস করে এবং ItemWriter ডেটাকে আউটপুট ডেস্টিনেশনে (যেমন ডেটাবেস, ফাইল, ইত্যাদি) লেখে।

স্প্রিং ব্যাচ আর্কিটেকচারের উদাহরণ

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

Step 1: স্প্রিং ব্যাচ কনফিগারেশন

প্রথমে আমাদের @EnableBatchProcessing অ্যানোটেশন দিয়ে স্প্রিং ব্যাচ কনফিগারেশন সক্ষম করতে হবে।

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private DataSource dataSource;

    @Bean
    public ItemReader<User> reader() {
        FlatFileItemReader<User> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource("users.csv"));
        reader.setLineMapper(new DefaultLineMapper<User>() {{
            setLineTokenizer(new DelimitedLineTokenizer() {{
                setNames("id", "name", "email");
            }});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<>() {{
                setTargetType(User.class);
            }});
        }});
        return reader;
    }

    @Bean
    public ItemProcessor<User, User> processor() {
        return new UserItemProcessor();
    }

    @Bean
    public ItemWriter<User> writer() {
        JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
        writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
        writer.setSql("INSERT INTO users (id, name, email) VALUES (:id, :name, :email)");
        writer.setDataSource(dataSource);
        return writer;
    }

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

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

    @Bean
    public JobLauncher jobLauncher(JobRegistry jobRegistry) {
        return new SimpleJobLauncher();
    }
}

Step 2: ItemProcessor (ডেটা প্রসেসিং)

এখানে একটি UserItemProcessor ক্লাস তৈরি করা হয়েছে, যা ডেটা প্রসেস করে।

public class UserItemProcessor implements ItemProcessor<User, User> {

    @Override
    public User process(User user) throws Exception {
        user.setName(user.getName().toUpperCase()); // Name কে uppercase এ পরিবর্তন করা হচ্ছে
        return user;
    }
}

Step 3: ডেটাবেস মডেল (User)

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

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // getters and setters
}

স্প্রিং ব্যাচের কাজের প্রক্রিয়া

  1. ItemReader: প্রথমে ItemReader সিস্টেম CSV ফাইল থেকে ডেটা রিড করে। এখানে, FlatFileItemReader ব্যবহার করা হচ্ছে, যা ফাইল থেকে লাইন পড়বে এবং প্রতিটি লাইনের ডেটাকে User অবজেক্টে ম্যাপ করবে।
  2. ItemProcessor: ItemProcessor ডেটার উপর কোনো প্রক্রিয়া বা ট্রান্সফরমেশন করে। আমাদের উদাহরণে, এটি User অবজেক্টের নামকে uppercase-এ রূপান্তর করে।
  3. ItemWriter: ItemWriter প্রসেস করা ডেটাকে একটি ডেটাবেসে লেখে। এখানে, JdbcBatchItemWriter ব্যবহার করা হয়েছে, যা ডেটাকে ডেটাবেসে ইনসার্ট করবে।
  4. Job and Step: একটি Job তৈরি করা হয়, যার মধ্যে একটি বা একাধিক Step থাকে। এখানে, আমরা একটি step1 তৈরি করেছি, যা ডেটা রিড, প্রসেস এবং রাইটিংয়ের জন্য দায়ী।
  5. JobLauncher: JobLauncher ব্যবহার করে আমরা Job শুরু করি। এটি ব্যাচ প্রসেসিংয়ের কার্যক্রম শুরু করবে।

উপসংহার

স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক, যা ব্যাচ প্রক্রিয়াকরণ, যেমন ডেটা ট্রান্সফরমেশন, লোডিং, এবং মাইগ্রেশন কাজগুলোকে সহজ করে তোলে। এর আর্কিটেকচার প্রধানত Job, Step, ItemReader, ItemProcessor, এবং ItemWriter এর চারপাশে গড়ে ওঠে। স্প্রিং ব্যাচের সাহায্যে আপনি বড় পরিমাণের ডেটা প্রক্রিয়া, ভ্যালিডেশন এবং রাইটিং কাজগুলো দক্ষভাবে পরিচালনা করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...