آموزش برنامه نویسی جاوا | Java
5.71K subscribers
1.09K photos
158 videos
378 files
1.16K links
🎓آکـــــــــادمی جاواپـــــــــــــــرو
آموزش پیش نیازهای برنامه نویسی
آموزش مقدماتی تا پیشرفته جاوا
آموزش Spring Boot
سفارش پروژه ، دوره و تدریس خصوصی: @rzutab
مشاهده دوره ها و ثبت نام👇
wwww.academyjavapro.com
گروه جاوا : @group_javapro
Download Telegram
💡مثال از استفاده‌ی ترکیبی @EventListener و @Async در Spring Boot. این مثال شامل:

1. تعریف یک رویداد سفارشی (UserRegisteredEvent)

2. انتشار رویداد از یک سرویس

3. دریافت رویداد توسط یک Listener با @EventListener

4. اجرای Listener به‌صورت ناهمزمان با @Async

🔘1. پیکربندی فعال‌سازی Async

// AppConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

@Configuration
@EnableAsync
public class AppConfig {
}

---

🔘2. تعریف رویداد سفارشی

// 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;
    }
}

---

🔘3. سرویس ثبت کاربر و انتشار رویداد

// 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));
    }
}


🔘4. شنونده‌ی رویداد با @EventListener و @Async


// 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 درگیر شدی؟

➡️اشتراک 👍لایک 💬کامنت

⚡️ @javapro_ir
💬@group_javapro



#جاوا #برنامه_نویسی #java #spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1