This guide shows how to handle
transactions in
Spring Boot using the
H2 database to ensure consistent data operations.
1. Add Dependencies
In
pom.xml:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2. Configure H2 Database
In
application.properties:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
3. Create Entity
import jakarta.persistence.*;
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String owner;
private Double balance;
}
4. Repository
import org.springframework.data.jpa.repository.JpaRepository;
public interface AccountRepository extends JpaRepository<Account, Long> {
}
5. Service with Transactions
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AccountService {
private final AccountRepository repo;
public AccountService(AccountRepository repo) {
this.repo = repo;
}
@Transactional
public void transfer(Long fromId, Long toId, Double amount) {
Account from = repo.findById(fromId).orElseThrow();
Account to = repo.findById(toId).orElseThrow();
from.setBalance(from.getBalance() - amount);
to.setBalance(to.getBalance() + amount);
repo.save(from);
repo.save(to);
}
}
Here,
@Transactional ensures both updates happen together, or none at all.
6. Test Transaction Rollback
If an exception occurs inside
transfer(), the transaction will
rollback and balances stay unchanged.
image quote pre code