Producer
📌 Purpose
🔧 Class: CampaignExecutionProducer
CampaignExecutionProducer@Component
public class CampaignExecutionProducer {
@Autowired
private CampaignRepository campaignRepository;
@Autowired
private CampaignExecutionService executionService;
@Autowired
private TransactionTemplateBuilder ttb;
@SchedulerLock(name = "CampaignExecutionProducer_produce", lockAtMostFor = "PT5M", lockAtLeastFor = "PT30S")
@Scheduled(initialDelay = 120_000, fixedDelayString = "${campaign.execution.producer.fixedDelay}")
public void produce() {
final LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
campaignRepository.findAutomaticScheduledCampaigns()
.forEach(id -> {
ttb.requiresNew().executeWithoutResult(s -> {
Campaign campaign = campaignRepository.getSync(id);
if (campaign.isActive()
&& campaign.getAutomaticCampaignStatus() == AutomaticCampaignStatus.SCHEDULED
&& isWaitNewExecution(campaign, now)) {
executionService.createExecution(campaign);
campaignRepository.saveAndFlush(campaign);
}
});
});
}
// Helper methods below...
}⏰ Execution Frequency
🧠 Conditions for Creating a New CampaignExecution
🔁 Support for restartable Campaigns
restartable Campaigns🧩 Helper Method
📝 Example Behavior
📌 Summary
Last updated
Was this helpful?