İçeriğe geç

Asenkron Bağlamda ORM Çağrısı (ARCH4043)

Anahtar java.async.jpa-session-in-async · Önem warning · Kategori async

Senkron bir JPA/ORM veritabanı çağrısı bir asenkron görev veya başlatılan thread içinde çalıştırıldığında thread’i bloklar ve genellikle thread’e bağlı EntityManager oturumuyla paylaşım sorunları yaratır.

CompletableFuture.runAsync(() -> {
User u = entityManager.find(User.class, id); // bloklayan senkron ORM
process(u);
});
CompletableFuture.supplyAsync(() -> {
return repository.findById(id); // ayrılmış executor + scope'lu EM
}, dbExecutor).thenAccept(this::process);

Bloklayan ORM çağrılarını ayrılmış bir veritabanı executor’ında çalıştırın ve EntityManager’ı thread’ler arasında paylaşmayın.