در این مقاله کوتا سعی شده چندین دستورالعمل مهم جهت افزایش کارایی ترنزکشن های پایگاه داده برنامه هایی مبتنی بر spring boot ارایه شود.
۱. در اولین گام در فایل پیکربندی پروژه (application. Properties) موارد زیر را اضافه کنید:
spring.datasource.hikari.auto-commit=false spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true
در spring boot متدی که با @Transactional شروع می شود هنگام فراخوانی متد، کانکشن پایگاه داده اکتساب می شود به خاطر اینکه Hibernate وضعیت auto-commit کانکشن JDBC چک می کند و اگر فعال باشد غیرفعال می کند. با انجام این کانفیگ دیگر Hibernate این کار را انجام نمی دهد، چون ما به صورت دستی وضعیت auto-commit کانکشن JDBC غیرفعال کرده و این را هم به Hibernate اعلام کرده ایم
این امر باعث می شود در متدهایی که با @Transactional شروع می شوند تا زمانیکه به ترنزکشن نیاز نباشد ترنزکشن گرفته نشود بنابراین در سرویس های که در اول کار منطق طولانی دارند خیلی می تواند در بهینه سازی موثر باشد.
۲.الویت استفاده از @Transactional(readOnly=true) باشد به دلیل اینکه موجودیت ها(entities) در دو حالت read-write یا read-only لود می شوند و حالت read-write به دلیل استفاد از hydrated state or loaded state پر هزینه است.
۳. از @Transactionalدر توابعی که به صورت private, protected تعریف شده اند، استفاده نکنید و حتما از یک کلاس دیگر این توابع را فراخوانی کنید.
۴. در Repository Interfaces از @Transactional(readOnly=true) استفاده کنید و در توابع این کلاس ها که عملیات تغییر مانند UPDATE اعمال می کنند از @Transactional استفاده کنید.
۵. توابع مربوط به سرویس ها را بررسی کنید ببینید به نیازی به @Transactional دارند یا نه. اگر دارند ببینید این حالت @Transactional(readOnly=true) جوابگو هست یا نه. اگر نبود در نهایت از @Transactional استفاده کنید.
۶. از اضافه کردن @Transactional به کلاس های کنترلی و سرویس خودداری کنید.
۷. توابع سرویس که از @Transactional استفاده می کنند بررسی کنید و اگر طول ترنزکشن زیاد بود حتما refactorکنید