点击提交按钮,我正在调用负责
的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秒。
我的问题是,是否可以将发送电子邮件代码作为独立的线程运行。
请分享您对如何处理此要求的看法。
答案 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,这也具有集中配置的优势。