<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring on محمدرضا دهقانی تفتی — سایت شخصی</title><link>https://detafti.ir/tags/spring/</link><description>Recent content in Spring on محمدرضا دهقانی تفتی — سایت شخصی</description><generator>Hugo</generator><language>fa-IR</language><atom:link href="https://detafti.ir/tags/spring/index.xml" rel="self" type="application/rss+xml"/><item><title>زنده‌بودن با سالم‌بودن فرق دارد</title><link>https://detafti.ir/notes/k8s-liveness-vs-readiness/</link><pubDate>Fri, 11 Sep 2026 17:20:00 +0330</pubDate><guid>https://detafti.ir/notes/k8s-liveness-vs-readiness/</guid><description>&lt;p>بدترین اختلال کوبرنتیزی که مدام می‌بینم، از کار افتادن یک نود نیست. یک پایگاه‌داده‌ی کُند است، یک پروب liveness که با همان پایگاه‌داده حرف می‌زند، و کلاستری که بعد هر پادی را که هنوز کار مفید می‌کرد می‌کُشد.&lt;/p>
&lt;p>liveness یعنی «این برنامه سالم است» نیست. یعنی «این فرایند آن‌قدر گیر کرده که کوبرنتیز باید خلاصش کند». اگر این اسلحه را به سمت یک وابستگی بگیرید، کل ناوگان را خواهید زد.&lt;/p></description></item><item><title>@Transactional اسپرینگ آن چیزی نیست که فکر می‌کنید</title><link>https://detafti.ir/notes/spring-transactional-in-production/</link><pubDate>Fri, 11 Sep 2026 17:10:00 +0330</pubDate><guid>https://detafti.ir/notes/spring-transactional-in-production/</guid><description>&lt;p>در بازبینی کد هنوز می‌بینم که &lt;code>@Transactional&lt;/code> مثل یک دعای خیر به کار می‌رود: رویش بگذار روی یک متد، و پایگاه‌داده سر به راه می‌شود. نمی‌شود. اسپرینگ وقتی تراکنشی را شروع می‌کند که یک &lt;strong>پروکسی&lt;/strong> فراخوانی ورودی را بگیرد. اگر فراخوانی هرگز به پروکسی نرسد، نه تراکنشی دارید، نه rollbackی، و در عوض یک باگ بسیار گیج‌کننده در محیط عملیاتی خواهید داشت.&lt;/p>
&lt;h2 id="آنچه-باور-داشتم--آنچه-حالا-میکنم">آنچه باور داشتم ← آنچه حالا می‌کنم&lt;/h2>
&lt;p>قبلاً «محض احتیاط» روی هر متد سرویس کمی &lt;code>@Transactional&lt;/code> می‌پاشیدم. حالا آن را روی همان یک متدی می‌گذارم که مرز مورد کاربرد است، تستی می‌نویسم که rollback را اثبات کند، و فراخوانی‌های خصوصی درون یک کلاس را نشانه‌ی بو می‌دانم.&lt;/p></description></item><item><title>جاوا، اسپرینگ، کوبرنتیز</title><link>https://detafti.ir/notes/java-spring-kubernetes/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0330</pubDate><guid>https://detafti.ir/notes/java-spring-kubernetes/</guid><description>&lt;p>نقشه‌ای از اینکه واقعاً چطور نرم‌افزار بک‌اند را اجرا می‌کنم: جاوا روی JVM، اسپرینگ به‌عنوان لایه‌ی برنامه، و کوبرنتیز به‌عنوان جایی که برنامه در آن زندگی می‌کند. از اینجا شروع کنید، بعد سراغ یادداشتی بروید که با مسئله‌ی پیش روی شما می‌خواند.&lt;/p>
&lt;p>این یک فهرست آموزشی نیست. این ترتیبی است که یک هم‌تیمی را بعد از یک حادثه از آن عبور می‌دهم.&lt;/p>
&lt;h2 id="اگر-تازه-اینجا-آمدهاید">اگر تازه اینجا آمده‌اید&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="https://detafti.ir/notes/spring-transactional-in-production/">&lt;code>@Transactional&lt;/code> اسپرینگ آن چیزی نیست که فکر می‌کنید&lt;/a> — اینکه تراکنش‌ها واقعاً کجا شروع می‌شوند، و چرا متدی که روی &lt;code>this&lt;/code> متد دیگری را صدا می‌زند بی‌سروصدا هیچ کاری نمی‌کند.&lt;/li>
&lt;li>&lt;a href="https://detafti.ir/notes/k8s-liveness-vs-readiness/">زنده‌بودن با سالم‌بودن فرق دارد&lt;/a> — آن اختلال کوبرنتیز که شبیه حلقه‌ی کرش به نظر می‌رسد ولی از یک وابستگی کُند شروع شده است.&lt;/li>
&lt;li>&lt;a href="https://detafti.ir/notes/reliability-lessons-from-sqlite/">درس‌های قابلیت اطمینان از SQLite&lt;/a> — چرا ابزاری که مسئله‌های بیشتری حل می‌کند تا بسازد، در محیط عملیاتی ماندگار می‌شود.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="https://detafti.ir/courses/java/">دوره‌ی جاوا&lt;/a> مسیر بلندتر است، برای وقتی که بخواهید این پشته را با من بنویسید، نه فقط درباره‌اش بخوانید.&lt;/p></description></item></channel></rss>