Enterprise 중급

EJB 타이머 대 Jakarta 스케줄러

ManagedScheduledExecutorService로 무거운 EJB 타이머를 대체합니다.

✕ Java EE
@Stateless
public class ReportGenerator {
    @Resource
    TimerService timerService;

    @PostConstruct
    public void init() {
        timerService.createCalendarTimer(
            new ScheduleExpression()
                .hour("2").minute("0"));
    }

    @Timeout
    public void generateReport(Timer timer) {
        // runs every day at 02:00
        buildDailyReport();
    }
}
✓ Jakarta EE 10+
@ApplicationScoped
public class ReportGenerator {
    @Resource
    ManagedScheduledExecutorService scheduler;

    @PostConstruct
    public void init() {
        scheduler.scheduleAtFixedRate(
            this::generateReport,
            0, 24, TimeUnit.HOURS);
    }

    public void generateReport() {
        buildDailyReport();
    }
}
이 코드에 문제가 있나요? 알려주세요.
🪶

보일러플레이트 감소

@Timeout 콜백이나 ScheduleExpression이 없습니다 — 표준 ScheduledExecutorService API를 사용합니다.

🧪

더 나은 테스트 가능성

일반 메서드와 실행자 목은 EJB 컨테이너 없이 단위 테스트를 간단하게 만듭니다.

☁️

클라우드 네이티브 친화적

관리된 실행자는 컨테이너 생명주기와 통합되고 경량 런타임에서 작동합니다.

이전 방식
EJB TimerService
모던 방식
ManagedScheduledExecutorService
JDK 버전
11
난이도
중급
EJB 타이머 대 Jakarta 스케줄러
사용 가능

Jakarta EE 10 / Concurrency 3.0 이후 사용 가능

EJB 타이머는 @Timeout 콜백과 ScheduleExpression을 사용하는 @Stateless 또는 @Singleton 빈이 필요합니다. ManagedScheduledExecutorService는 컨테이너 관리 스레드로 표준 ScheduledExecutorService API를 제공합니다.

공유 𝕏 🦋 in