TL;DR • Move @Scheduled to PublisherScheduleHandler; it sets MDC (runId,jobId) then calls the service. • Keep perf/timing + logging inside SplitterPublisherServiceImpl (unchanged) — it logs JOB_START, PAGE_SUMMARY, JOB_SUMMARY. • REQUIRES_NEW still works via self-injection; executor is ThreadPoolTaskExecutor with MDC propagation.
⸻
Below is the complete, drop-in set with your new scheduler handler.
⸻