如何将电子邮件作为独立代码发送以加快响应速度?

时间:2015-08-07 00:56:03

标签: java

点击提交按钮,我正在调用负责

的Jersey REST Web服务
1 .Insert record in the database 
2.And send email .

这是我的代码

if (operation.equals("Insert")) {
        String SQLInsertMgmtUser = "INSERT INTO User (depotID , emp_ID , appUserName)VALUES(? , ? , ?)";
        String sendEmail =  SendEmailUtility.sendmail(empmail, generatedPwd_str);
    } 

public static String sendmail(String sendemalto,String generatedpwd) throws IOException 
{
        String result = "fail";
        Properties props_load = getProperties();
        try {
            // Code to send the email Using java mail API 
            result = "success";
        } catch (MessagingException e) {
            result = "fail";
            logger.error("Exception Occured"+ "sendemalto" +sendemalto , e);
        }
        return result;
    }


public static Properties getProperties()   
{
          if (props == null) {
           File configDir = new File(System.getProperty("catalina.base"), "conf");
           File configFile = new File(configDir, "email.properties");
           InputStream stream = null;
        try {
            stream = new FileInputStream(configFile);
        } catch (FileNotFoundException e) {
            logger.error("exception" , e);
        }
           props = new Properties();
           try {
            props.load(stream);
        } catch (IOException e) {
            logger.error("exception" , e);
        }
       }
       return props; 
  }

此代码工作正常,但我对此代码所面临的问题是提交操作几乎需要15秒

我的问题是,是否可以将发送电子邮件代码作为独立的线程运行。

请分享您对如何处理此要求的看法。

2 个答案:

答案 0 :(得分:1)

异步执行任务的最简单方法是使用ExecutorService

这样的事情:

public YourClass {

    private    ExecutorService executorService = Executors.newFixedThreadPool(10);

   public void yourMethod() {
     if (operation.equals("Insert")) {
       String SQLInsertMgmtUser = "INSERT INTO User (depotID , emp_ID , appUserName)VALUES(? , ? , ?)";
       executorService.execute(new Runnable() {
         public void run() {
            SendEmailUtility.sendmail(empmail, generatedPwd_str);
         }
      });
   } 
}

答案 1 :(得分:0)

我会设置一个localhost MTA(比如OpenSMTPD)然后转发到你真正的MTA("卫星模式")。这为您提供了一个本地队列。如果将消息发送到远程MTA需要几秒钟,那么本地MTA将处理该消息是正常的。

如果您想在多个应用程序之间共享MTA,这也具有集中配置的优势。