Browse Source

Mail service minor refactoring

pull/10726/head
Sergey Matvienko 2 years ago
parent
commit
3d26e85425
  1. 11
      application/src/main/java/org/thingsboard/server/service/mail/DefaultMailService.java
  2. 4
      application/src/main/java/org/thingsboard/server/service/mail/MailSenderInternalExecutorService.java
  3. 1
      application/src/main/java/org/thingsboard/server/service/mail/TbMailContextComponent.java

11
application/src/main/java/org/thingsboard/server/service/mail/DefaultMailService.java

@ -19,7 +19,6 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.util.concurrent.Futures;
import freemarker.template.Configuration;
import freemarker.template.Template;
import jakarta.xml.bind.DatatypeConverter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -99,7 +98,7 @@ public class DefaultMailService implements MailService {
@Value("${mail.per_tenant_rate_limits:}")
private String perTenantRateLimitConfig;
private final ScheduledExecutorService scheduler;
private final ScheduledExecutorService timeoutScheduler;
private TbMailSender mailSender;
@ -112,7 +111,7 @@ public class DefaultMailService implements MailService {
this.freemarkerConfig = freemarkerConfig;
this.adminSettingsService = adminSettingsService;
this.apiUsageClient = apiUsageClient;
this.scheduler = Executors.newScheduledThreadPool(1, ThingsBoardThreadFactory.forName("mail-service-watchdog"));
this.timeoutScheduler = Executors.newScheduledThreadPool(1, ThingsBoardThreadFactory.forName("mail-service-watchdog"));
}
@PostConstruct
@ -122,8 +121,8 @@ public class DefaultMailService implements MailService {
@PreDestroy
public void destroy() {
if (scheduler != null) {
scheduler.shutdownNow();
if (timeoutScheduler != null) {
timeoutScheduler.shutdownNow();
}
}
@ -446,7 +445,7 @@ public class DefaultMailService implements MailService {
private void sendMailWithTimeout(JavaMailSender mailSender, MimeMessage msg, long timeout) {
var submittedMail = Futures.withTimeout(
mailExecutorService.submit(() -> mailSender.send(msg)),
timeout, TimeUnit.MILLISECONDS, scheduler);
timeout, TimeUnit.MILLISECONDS, timeoutScheduler);
try {
submittedMail.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {

4
application/src/main/java/org/thingsboard/server/service/mail/MailSenderInternalExecutorService.java

@ -19,6 +19,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.common.util.AbstractListeningExecutor;
/**
* Executor have the sole purpose to send mails. It should be used only by Mail Service.
* For other purposes please use the MailExecutorService component
* */
@Component
public class MailSenderInternalExecutorService extends AbstractListeningExecutor {

1
application/src/main/java/org/thingsboard/server/service/mail/TbMailContextComponent.java

@ -20,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.thingsboard.server.dao.settings.AdminSettingsService;
import org.thingsboard.server.queue.util.TbCoreComponent;
@Component
@Data

Loading…
Cancel
Save