স্প্রিং ফ্রেমওয়ার্কে ট্রানজ্যাকশন ম্যানেজমেন্ট একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি ডেটাবেসে Atomicity, Consistency, Isolation, এবং Durability (ACID) প্রিন্সিপাল মেনে ডেটা পরিচালনা নিশ্চিত করে। স্প্রিং ORM ট্রানজ্যাকশন পরিচালনার জন্য Declarative এবং Programmatic পদ্ধতি প্রদান করে। সাধারণত Declarative পদ্ধতি সবচেয়ে বেশি ব্যবহৃত হয় কারণ এটি সরল ও কার্যকর।
ট্রানজ্যাকশন ম্যানেজমেন্টের ধরন
Declarative Transaction Management
এটি অ্যানোটেশন বা XML কনফিগারেশনের মাধ্যমে ট্রানজ্যাকশন পরিচালনা করে। কোডে কম জটিলতা থাকে এবং সহজেই ট্রানজ্যাকশন পরিচালনা করা যায়।
Programmatic Transaction Management
এটি ম্যানুয়ালি ট্রানজ্যাকশন শুরু এবং শেষ করার জন্য TransactionTemplate বা PlatformTransactionManager ব্যবহার করে।
উদাহরণ: Spring ORM-এ Declarative Transaction Management
প্রয়োজনীয় ডিপেনডেন্সি যোগ করা
pom.xml ফাইলে ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId> <!-- H2 ডাটাবেস ব্যবহার -->
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Entity ক্লাস তৈরি করা
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String accountHolder;
private Double balance;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccountHolder() {
return accountHolder;
}
public void setAccountHolder(String accountHolder) {
this.accountHolder = accountHolder;
}
public Double getBalance() {
return balance;
}
public void setBalance(Double balance) {
this.balance = balance;
}
}
JpaRepository ইন্টারফেস তৈরি করা
import org.springframework.data.jpa.repository.JpaRepository;
public interface AccountRepository extends JpaRepository<Account, Long> {
}
ট্রানজ্যাকশন ম্যানেজমেন্ট ব্যবহার করে সার্ভিস তৈরি করা
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class AccountService {
@Autowired
private AccountRepository accountRepository;
@Transactional
public void transfer(Long fromAccountId, Long toAccountId, Double amount) {
Account fromAccount = accountRepository.findById(fromAccountId).orElseThrow();
Account toAccount = accountRepository.findById(toAccountId).orElseThrow();
if (fromAccount.getBalance() < amount) {
throw new IllegalArgumentException("Insufficient balance");
}
fromAccount.setBalance(fromAccount.getBalance() - amount);
toAccount.setBalance(toAccount.getBalance() + amount);
accountRepository.save(fromAccount);
accountRepository.save(toAccount);
}
}
কন্ট্রোলার তৈরি করা
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/accounts")
public class AccountController {
@Autowired
private AccountService accountService;
@PostMapping("/transfer")
public String transfer(@RequestParam Long fromAccountId,
@RequestParam Long toAccountId,
@RequestParam Double amount) {
accountService.transfer(fromAccountId, toAccountId, amount);
return "Transfer successful!";
}
}
অ্যাপ্লিকেশন প্রোপার্টিজ কনফিগার করা
application.properties ফাইলে ডাটাবেস কনফিগারেশন যোগ করুন:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
প্রোগ্রামের কার্যপ্রবাহ
- HTTP POST রিকোয়েস্ট ব্যবহার করে
/accounts/transferএ ডাটা পাঠান। - সার্ভিস স্তরে
@Transactionalঅ্যানোটেশন ব্যবহার করা হয়েছে, যা নিশ্চিত করে যে ট্রানজ্যাকশন সফল হলে ডাটাবেসে পরিবর্তন সংরক্ষিত হবে। ব্যর্থ হলে সমস্ত অপারেশন রোলব্যাক (Rollback) হবে।
সারাংশ
স্প্রিং ORM-এ ট্রানজ্যাকশন ম্যানেজমেন্ট সহজ এবং কার্যকর। @Transactional অ্যানোটেশন ব্যবহার করে Declarative পদ্ধতিতে ডেটাবেস অপারেশন পরিচালনা করা যায়। এটি ডেটা কনসিস্টেন্সি নিশ্চিত করে এবং ডেভেলপারদের জটিল কোড লিখতে হয় না।
Read more