diff --git a/persistence-modules/spring-boot-persistence-4/pom.xml b/persistence-modules/spring-boot-persistence-4/pom.xml
index 75b444f7cc..d4bf8ba5cb 100644
--- a/persistence-modules/spring-boot-persistence-4/pom.xml
+++ b/persistence-modules/spring-boot-persistence-4/pom.xml
@@ -60,6 +60,11 @@
${lombok.version}
provided
+
+ org.springframework
+ spring-tx
+ ${spring.tx.version}
+
@@ -84,6 +89,7 @@
3.2.0
1.16.1
1.18.30
+ 6.1.4
\ No newline at end of file
diff --git a/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/Account.java b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/Account.java
new file mode 100644
index 0000000000..6bb070cad2
--- /dev/null
+++ b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/Account.java
@@ -0,0 +1,23 @@
+package com.baeldung.transactionalandasync;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(of = {"id"})
+@Table(name = "account")
+@Data
+public class Account {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+
+ @Column(name = "balance")
+ private BigDecimal balance;
+}
diff --git a/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/AccountRepository.java b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/AccountRepository.java
new file mode 100644
index 0000000000..a3c15e25eb
--- /dev/null
+++ b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/AccountRepository.java
@@ -0,0 +1,6 @@
+package com.baeldung.transactionalandasync;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface AccountRepository extends JpaRepository {
+}
diff --git a/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/AccountService.java b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/AccountService.java
new file mode 100644
index 0000000000..d54f90e2e5
--- /dev/null
+++ b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/AccountService.java
@@ -0,0 +1,41 @@
+package com.baeldung.transactionalandasync;
+
+import jakarta.transaction.Transactional;
+import lombok.AllArgsConstructor;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+@Service
+@AllArgsConstructor
+@Transactional
+public class AccountService {
+
+ private final AccountRepository accountRepository;
+
+ @Async
+ public void transferAsync(Long depositorId, Long favoredId, BigDecimal amount) {
+ transfer(depositorId, favoredId, amount);
+
+ printReceipt();
+ }
+
+ @Transactional
+ public void transfer(Long depositorId, Long favoredId, BigDecimal amount) {
+ Account depositorAccount = accountRepository.findById(depositorId)
+ .orElseThrow(IllegalArgumentException::new);
+ Account favoredAccount = accountRepository.findById(favoredId)
+ .orElseThrow(IllegalArgumentException::new);
+
+ depositorAccount.setBalance(depositorAccount.getBalance().subtract(amount));
+ favoredAccount.setBalance(favoredAccount.getBalance().add(amount));
+
+ accountRepository.save(depositorAccount);
+ accountRepository.save(favoredAccount);
+ }
+
+ public void printReceipt() {
+ // logic to print the receipt
+ }
+}
diff --git a/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/BankAccountApplication.java b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/BankAccountApplication.java
new file mode 100644
index 0000000000..403a098df8
--- /dev/null
+++ b/persistence-modules/spring-boot-persistence-4/src/main/java/com/baeldung/transactionalandasync/BankAccountApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.transactionalandasync;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BankAccountApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(BankAccountApplication.class, args);
+ }
+
+}