1. تعریف یک رویداد سفارشی (UserRegisteredEvent)
2. انتشار رویداد از یک سرویس
3. دریافت رویداد توسط یک Listener با @EventListener
4. اجرای Listener بهصورت ناهمزمان با @Async
// AppConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AppConfig {
}
---
// UserRegisteredEvent.java
import org.springframework.context.ApplicationEvent;
public class UserRegisteredEvent extends ApplicationEvent {
private final String email;
public UserRegisteredEvent(Object source, String email) {
super(source);
this.email = email;
}
public String getEmail() {
return email;
}
}
---
// UserService.java
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final ApplicationEventPublisher publisher;
public UserService(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void registerUser(String email) {
// ثبت کاربر در دیتابیس یا عملیات دیگر (اینجا شبیهسازی میکنیم)
System.out.println("User registered: " + email);
// انتشار رویداد
publisher.publishEvent(new UserRegisteredEvent(this, email));
}
}
// NotificationListener.java
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.context.event.EventListener;
@Component
public class NotificationListener {
@Async
@EventListener
public void handleUserRegistration(UserRegisteredEvent event) {
// شبیهسازی ارسال ایمیل
try {
Thread.sleep(2000); // تأخیر برای شبیهسازی پردازش سنگین
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Sending welcome email to: " + event.getEmail());
}
⚡️ @javapro_ir💬 @group_javapro
#جاوا #برنامه_نویسی #java #spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
چرخه حیات Entity در Hibernate به زبان ساده🔥
با خطای تصادفی DetachedEntityPassedToPersistException دستوپنجه نرم میکنی؟ نمیدونی کی شیات Persistent، Transient یا Detached هست؟ تنها نیستی و ناراحت شدن از این موضوع هم طبیعیه.
⚠️ مشکل: خیلی از برنامهنویسها بدون اینکه بدونن شی الان در چه وضعیتی توی چرخه حیات قرار داره، از متدهای save()، persist() یا merge() استفاده میکنن. نتیجهاش میتونه باگهای کثیف، نشت حافظه، یا نوشتنهای ناخواسته در دیتابیس باشه.
در پروژههای بزرگ مثل میکروسرویسها یا برنامههای مونولیت قدیمی، این آشفتگی میتونه به کابوس تولید برسه. 💀
🟢 راهحل: چرخه حیات Entity در Hibernate رو خوب یاد بگیر.
🧠 وضعیتها رو بشناس:
🍼 Transient: شیء تازه ساختهشده، هنوز به دیتابیس وصل نیست.
🧬 متولد شده، ولی Hibernate از وجودش خبر نداره.
🔒 Persistent: تحت مدیریت Hibernate و همگام با دیتابیس.
🔧 Hibernate اون رو کنترل و تغییراتش رو خودکار همگامسازی میکنه.
🧳 Detached: قبلاً Persistent بوده، ولی الان از Session خارج شده.
🚶 از دنیای Hibernate خارج شده — الان تنهاست.
🗑 Removed: برای حذف علامتگذاری شده.
⚰️ Hibernate هنگام flush اون رو پاک میکنه.
👊 با استفاده درست از متدهایی مثل save()، merge()، evict()، delete()، این شمایی که چرخه شیء رو کنترل میکنی، نه برعکس.
🔍 یه راهنمای تصویری ساده هم درست کردم که همهچی رو شفاف نشون میده.
💡 اگه داری برنامههای Java در سطح سازمانی میسازی، تسلط به این مبحث یه انتخاب نیست — واجبه.
💬 تا حالا با موجودیتهای Detached یا تماسهای نادرست Persistence درگیر شدی؟
➡️ اشتراک 👍 لایک 💬 کامنت
#جاوا #برنامه_نویسی #java #spring_boot
با خطای تصادفی DetachedEntityPassedToPersistException دستوپنجه نرم میکنی؟ نمیدونی کی شیات Persistent، Transient یا Detached هست؟ تنها نیستی و ناراحت شدن از این موضوع هم طبیعیه.
در پروژههای بزرگ مثل میکروسرویسها یا برنامههای مونولیت قدیمی، این آشفتگی میتونه به کابوس تولید برسه. 💀
🧬 متولد شده، ولی Hibernate از وجودش خبر نداره.
🔧 Hibernate اون رو کنترل و تغییراتش رو خودکار همگامسازی میکنه.
🧳 Detached: قبلاً Persistent بوده، ولی الان از Session خارج شده.
🚶 از دنیای Hibernate خارج شده — الان تنهاست.
⚰️ Hibernate هنگام flush اون رو پاک میکنه.
🔍 یه راهنمای تصویری ساده هم درست کردم که همهچی رو شفاف نشون میده.
💬 تا حالا با موجودیتهای Detached یا تماسهای نادرست Persistence درگیر شدی؟
⚡️ @javapro_ir💬 @group_javapro
#جاوا #برنامه_نویسی #java #spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1