Programming & Development

Mastering Spring & MSA Transactions – Part 14: Advanced Transaction Testing: Real DB, Testcontainers, and Mocking External Calls

In-memory database tests with @Transactional are great for quick feedback, but they don’t fully capture real concurrency or vendor-specific behaviors in MySQL, PostgreSQL, or Oracle. Plus, if your app calls external services—like a payment gateway—you can’t rely on local rollback to undo a “live” network call. That’s where Testcontainers and mocks come in. By spinning…

Mastering Spring & MSA Transactions – Part 13: Bringing It All Together in Tests: How @Transactional Simplifies Spring Testing

Have you ever run a test that inserted some data, crashed, and then left your database in a weird state for the next test? Or spent hours resetting your DB every time you ran your suite, just to avoid leftover rows cluttering the tables? These headaches arise when we fail to test our transactional logic…

Mastering Spring & MSA Transactions – Part 5: Detecting @Transactional at Bean Registration and Creating the Proxy: A Deep Dive into the Internal Mechanism

A Thorough Exploration of the Internal Mechanism Many developers know that in Spring Boot, you can simply place @Transactional on a method and get declarative transactions. But few realize when and how Spring spots that annotation and what it does behind the scenes to transform your class into a transaction-aware proxy. In this article, we’ll…

Mastering Spring & MSA Transactions – Part 12: When Transactions “Don’t Work”: Common Causes and Debugging Tips

You’ve configured your @Transactional settings—propagation, isolation, rollback rules—and verified everything in your code. Yet, sometimes you find a transaction isn’t firing, or a rollback isn’t happening. Why? This chapter examines three frequent culprits and some handy troubleshooting approaches. 1) Most Common Causes 1.1) Bean Not in Spring’s Scope → No Proxy Created Example: To fix…

Mastering Spring & MSA Transactions – Part 11: Under the Hood of @Transactional: How Spring’s Proxy Actually Applies Your Rules

In our previous articles, we saw how to configure transaction boundaries (Propagation), handle concurrency through Isolation, specify rollback exceptions, and fine-tune performance with readOnly or timeout. But after setting all these @Transactional properties, a question remains: How exactly does Spring apply those rules to each method call? The short answer: AOP proxies. Whenever you annotate…

Mastering Spring & MSA Transactions – Part 10: Fine-Tuning Your Transactions: readOnly, timeout, and Other Options

In the previous articles, we explored core transaction concepts like Propagation (when and how transactions start or join), Isolation (how to avoid concurrency anomalies), and rollback rules (deciding which exceptions trigger rollbacks). Now, it’s time to look at other Spring transaction attributes that can dramatically improve performance and stability: Let’s see how to configure these…

Mastering Spring & MSA Transactions – Part 9: Which Exceptions Should Roll Back Your Transactions?: Fine-Tuning Spring’s Rollback Rules

In the previous articles, we explored how to start or join transactions (propagation) and how to handle concurrency (isolation). However, even if you have those aspects covered, you still need to decide what happens when exceptions occur: What if you need to roll back on a checked exception like IOException? Or what if you want…

Mastering Spring & MSA Transactions – Part 8: Beyond Propagation: Mastering Transaction Isolation for Safer Concurrency

In the previous article, we explored the various propagation modes (REQUIRES_NEW, NOT_SUPPORTED, etc.), showing how different pieces of your application can start new transactions or share existing ones. However, even if you’ve got propagation nailed down, that alone won’t guarantee your data remains consistent when multiple users or services hit the database at the same…

Mastering Spring & MSA Transactions – Part 7: Unlocking Transaction Propagation in Spring: When to Combine, When to Separate

In our previous discussions, we discovered how @Transactional can automatically handle commits and rollbacks in Spring. Yet, real-world scenarios raise questions like: That’s exactly where transaction propagation steps in. This article explores the different propagation modes and how each fits common situations in everyday development. 1) What Is Transaction Propagation? Propagation in Spring determines how…

Mastering Spring & MSA Transactions – Part 6: Where Exactly to Put @Transactional: Class-Level or Method-Level?

You’ve seen how @Transactional allows Spring to automatically manage commits and rollbacks, freeing you from having to code transaction boundaries by hand. But once you start using it, a question arises: Should you declare @Transactional at the class level or the method level? This article dives into the pros, cons, and potential pitfalls of each…

End of content

End of content