EmailServiceImpl.java
package no.nav.data.common.mail;
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import no.nav.data.common.security.SecurityProperties;
import no.nav.data.common.storage.StorageService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class EmailServiceImpl implements EmailService {
public static final Logger logger = LogManager.getLogger(EmailServiceImpl.class);
private final StorageService storage;
private final SecurityProperties securityProperties;
private final EmailClient emailClient;
public EmailServiceImpl(StorageService storage, SecurityProperties securityProperties,
EmailClient emailClient) {
this.storage = storage;
this.securityProperties = securityProperties;
this.emailClient = emailClient;
}
@Override
public void sendMail(MailTask mailTask) {
var toSend = securityProperties.isDev() ? mailTask.withSubject("[DEV] " + mailTask.getSubject()) : mailTask;
emailClient.sendEmail(toSend).subscribe();
}
@Override
public void scheduleMail(MailTask mailTask) {
storage.save(mailTask);
}
@SchedulerLock(name = "sendMail")
@Scheduled(initialDelayString = "PT2M", fixedRateString = "PT1M")
public void sendMail() {
var tasks = storage.getAll(MailTask.class);
tasks.forEach(task -> {
sendMail(task);
storage.delete(task);
});
}
}