Spring Batch ব্যবহার করে ডেটাবেস থেকে ডেটা পড়া এবং লেখা একটি সাধারণ কাজ যা ItemReader এবং ItemWriter এর মাধ্যমে করা হয়। Spring Batch বিশেষভাবে JDBC এবং JPA এর মাধ্যমে ডেটাবেস অপারেশন করতে সহায়তা করে, যা বড় আকারের ডেটা প্রক্রিয়াকরণের জন্য খুবই কার্যকরী।
Spring Batch-এ ডেটাবেস থেকে ডেটা পড়তে এবং ডেটা লিখতে দুটি প্রধান উপাদান থাকে:
- ItemReader: এটি ডেটা সোর্স থেকে ডেটা রিড করে।
- ItemWriter: এটি প্রসেস করা ডেটা ডেটাবেসে বা অন্য কোনো আউটপুট সোর্সে লেখে।
এখানে আমরা JDBC এবং JPA এর মাধ্যমে ডেটাবেস থেকে ডেটা পড়া এবং লেখা সম্পর্কে বিস্তারিত আলোচনা করব।
১. JDBC এর মাধ্যমে ডেটাবেস থেকে ডেটা পড়া এবং লেখা
JDBC (Java Database Connectivity) হলো Java অ্যাপ্লিকেশনের জন্য ডেটাবেসের সাথে যোগাযোগ করার একটি স্ট্যান্ডার্ড পদ্ধতি। Spring Batch-এ JdbcCursorItemReader এবং JdbcBatchItemWriter ব্যবহার করে ডেটাবেস থেকে ডেটা পড়া এবং লেখা হয়।
১.১ JdbcCursorItemReader ব্যবহার করে ডেটা পড়া
JdbcCursorItemReader JDBC কনেকশনের মাধ্যমে ডেটাবেস থেকে ডেটা রিড করতে ব্যবহৃত হয়। এটি SQL কোয়েরি চালিয়ে ডেটাবেস থেকে রেকর্ড রিটার্ন করে।
উদাহরণ: JdbcCursorItemReader ব্যবহার করে ডেটা পড়া
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Bean
public JdbcCursorItemReader<User> reader() {
JdbcCursorItemReader<User> reader = new JdbcCursorItemReader<>();
reader.setDataSource(dataSource()); // ডেটাবেস কানেকশন
reader.setSql("SELECT id, name, email FROM users"); // SQL কোয়েরি
reader.setRowMapper(new BeanPropertyRowMapper<>(User.class)); // রেকর্ড ম্যাপিং
return reader;
}
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
ব্যাখ্যা:
JdbcCursorItemReader: ডেটাবেস থেকে ডেটা রিড করার জন্য ব্যবহার করা হয়।setSql: SQL কোয়েরি সেট করা হয়েছে, যাusersটেবিল থেকে ডেটা রিটার্ন করবে।setRowMapper:BeanPropertyRowMapperব্যবহার করে ডেটাবেস রেকর্ডগুলিUserঅবজেক্টে ম্যাপ করা হয়।
১.২ JdbcBatchItemWriter ব্যবহার করে ডেটা লেখা
JdbcBatchItemWriter ব্যবহৃত হয় ব্যাচ আকারে ডেটা ডেটাবেসে লিখতে।
উদাহরণ: JdbcBatchItemWriter ব্যবহার করে ডেটা লেখা
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.BeanPropertyItemPreparedStatementSetter;
import org.springframework.jdbc.core.PreparedStatementSetter;
@Bean
public JdbcBatchItemWriter<User> writer() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
writer.setDataSource(dataSource()); // ডেটাবেস কানেকশন
writer.setSql("INSERT INTO users (id, name, email) VALUES (?, ?, ?)"); // SQL কোয়েরি
writer.setItemPreparedStatementSetter(new BeanPropertyItemPreparedStatementSetter<>()); // প্যারামিটার সেট
return writer;
}
ব্যাখ্যা:
JdbcBatchItemWriter: এটি ডেটাবেসে ব্যাচ আকারে ডেটা লিখতে ব্যবহৃত হয়।setSql: ইনসার্ট SQL কোয়েরি দিয়ে ডেটাবেসে ডেটা লেখা হয়।setItemPreparedStatementSetter: এটিUserঅবজেক্টের প্রপার্টি মেপিং করে SQL প্যারামিটার পাঠানোর জন্য ব্যবহৃত হয়।
২. JPA এর মাধ্যমে ডেটাবেস থেকে ডেটা পড়া এবং লেখা
JPA (Java Persistence API) একটি Java API যা ডেটাবেসের সাথে অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) করে। Spring Batch-এ JpaPagingItemReader এবং JpaItemWriter ব্যবহৃত হয় ডেটাবেস থেকে ডেটা রিড এবং লেখার জন্য।
২.১ JpaPagingItemReader ব্যবহার করে ডেটা পড়া
JpaPagingItemReader JPA (Hibernate) ব্যবহার করে পেজ বাই পেজ ডেটা রিড করতে ব্যবহৃত হয়। এটি JPA কনফিগারেশন এবং @Entity ক্লাসের মাধ্যমে ডেটাবেস থেকে ডেটা রিড করে।
উদাহরণ: JpaPagingItemReader ব্যবহার করে ডেটা পড়া
import org.springframework.batch.item.database.JpaPagingItemReader;
import org.springframework.batch.item.database.JpaQueryProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
@Bean
public JpaPagingItemReader<User> reader() {
JpaPagingItemReader<User> reader = new JpaPagingItemReader<>();
reader.setEntityManagerFactory(entityManagerFactory().getObject());
reader.setQueryProvider(queryProvider()); // JPA কোয়েরি
reader.setPageSize(10); // পেজ সাইজ
return reader;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
// আপনার JPA EntityManagerFactory কনফিগারেশন
}
@Bean
public JpaQueryProvider queryProvider() {
// JPQL কোয়েরি তৈরি করুন
}
ব্যাখ্যা:
JpaPagingItemReader: এটি JPA ব্যবহার করে ডেটাবেস থেকে পেজ-বাই-পেজ ডেটা রিড করতে ব্যবহৃত হয়।setEntityManagerFactory: EntityManagerFactory কনফিগারেশন প্রদান করা হয়।setQueryProvider: JPQL কোয়েরি প্রদান করা হয়, যা ডেটাবেস থেকে রেকর্ড ফেচ করবে।
২.২ JpaItemWriter ব্যবহার করে ডেটা লেখা
JpaItemWriter ব্যবহৃত হয় প্রসেস করা ডেটা ডেটাবেসে সেভ করতে। এটি JPA EntityManager ব্যবহার করে ডেটা সেভ করে।
উদাহরণ: JpaItemWriter ব্যবহার করে ডেটা লেখা
import org.springframework.batch.item.database.JpaItemWriter;
import org.springframework.context.annotation.Bean;
@Bean
public JpaItemWriter<User> writer() {
JpaItemWriter<User> writer = new JpaItemWriter<>();
writer.setEntityManagerFactory(entityManagerFactory().getObject());
return writer;
}
ব্যাখ্যা:
JpaItemWriter: এটি JPA EntityManager ব্যবহার করে ডেটাবেসে ডেটা সেভ করতে ব্যবহৃত হয়।setEntityManagerFactory: EntityManagerFactory সেট করে যা ডেটাবেসে ডেটা সেভ করতে ব্যবহৃত হয়।
সারাংশ
JDBC এবং JPA এর মাধ্যমে Spring Batch ডেটাবেস থেকে ডেটা পড়া এবং লেখা অত্যন্ত কার্যকরী ও সুবিধাজনক। JDBC ব্যবহার করে সরাসরি SQL কোয়েরি দিয়ে ডেটা রিড এবং রাইট করা হয়, যেখানে JPA ORM (Object-Relational Mapping) ব্যবহার করে ডেটা অবজেক্টের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ স্থাপন করে। JdbcCursorItemReader, JdbcBatchItemWriter, JpaPagingItemReader, এবং JpaItemWriter Spring Batch-এ জনপ্রিয় উপাদান যা ডেটাবেসে ডেটা প্রক্রিয়া (Read and Write) করতে ব্যবহৃত হয়।
Read more