2017-07-15 14 views
0

我有實施故障轉移電子郵件服務的要求。意思是如果一個人失敗,服務可能會故障轉移到另一個提供者。實施故障轉移電子郵件服務...如果發生故障,請使用其他電子郵件服務提供商

提供者

我正在使用spring boot,maven。

是否可以使用應用程序屬性只喜歡

spring.mail.host=smtp.mailgun.org, smtp.sendgrid.org

至今: application.properties中

spring.mail.host=smtp.mailgun.org 
spring.mail.port=587 
spring.mail.username=some-username 
spring.mail.password=some-password 
spring.mail.properties.mail.smtp.starttls.enable=true 
spring.mail.properties.mail.smtp.starttls.required=true 
spring.mail.properties.mail.smtp.auth=true 
spring.mail.properties.mail.smtp.connectiontimeout=5000 
spring.mail.properties.mail.smtp.timeout=5000 
spring.mail.properties.mail.smtp.writetimeout=5000 

郵件發送方法實現:

@Override 
    public void sendMails(MailDomain mailDomain) { // MailDomain is class that contains fields useful to configure mail attributes 
     MimeMessage message = mailSender.createMimeMessage(); 
     MimeMessageHelper helper = new MimeMessageHelper(message); 

     try { 
      helper.setTo(mailDomain.getSendTo()); 
      helper.setText(mailDomain.getMailBody()); 
      helper.setSubject(mailDomain.getSubject()); 
     } catch (MessagingException e) { 
      LOG.debug("Unable to set details of message " + e.getMessage()); 
     } 

     try { 
      mailSender.send(message);  // send mail.... 
     } catch (MailException e) { 
      LOG.debug("Unable to sendmail " + e.getMessage()); 
     } 
    } 
+0

我的問題是不同的.. – user252514

回答

1

,當您提供兩個主機春天開機不會做故障切換,你必須定義一個第二個mailSender並自己處理故障轉移。泉讓一切變得簡單:

@Bean 
    @ConfigurationProperties(prefix = "second.mail") 
    public MailSender secondMailSender() { 
    return new JavaMailSenderImpl(); 
    } 

這將創建一個從屬性,如初始化的新郵件發送者:現在

second.mail.host=mail.mymail.org 

,這個bean的存在將抑制默認郵件發送者的自動配置,所以你需要兩個定義自己:

@Bean 
@ConfigurationProperties(prefix = "first.mail") 
public MailSender firstMailSender() { 
    return new JavaMailSenderImpl(); 
} 

之後:

@Autowired 
private MailSender secondMailSender; 

@Autowired 
private MailSender firstMailSender; 

try { 
    firstMailSender.send(message);  // send mail.... 
} catch (MailException e) { 
    LOG.debug("Unable to sendmail " + e.getMessage()); 
    try { 
    firstMailSender.send(message); 
    .... 
} 
相關問題