Spring TaskExecutor and JavaMailSender
Spring has implementation for concurrency tasks based on java concurrency. Next I will create mail sending service (JavaMailSender - extended MailSender interface for JavaMail) using task executor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| package com.test.service;import java.io.File;import java.util.Properties;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.core.io.FileSystemResource;import org.springframework.core.task.TaskExecutor;import org.springframework.mail.MailParseException;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Service;@Service("mailService")public class MailService { @Autowired private JavaMailSender mailSender; @Autowired private TaskExecutor taskExecutor; private static Log log = LogFactory.getLog(MailService.class); /** * @param text - message * @param from - sender email * @param to - receiver email * @param subject - subject * @param filePath - file to attach, could be null if file not required * @throws Exception */ public void sendMail(final String text, final String from, final String to, final String subject, final File file) throws Exception { taskExecutor.execute( new Runnable() { public void run() { try { sendMailSimple(text, to, subject, file.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); log.error("Failed to send email to: " + to + " reason: "+e.getMessage()); } } }); } private void sendMailSimple(String text, String from, String to, String subject, String filePath) throws Exception { MimeMessage message = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(text); if(filePath != null){ FileSystemResource file = new FileSystemResource(filePath); helper.addAttachment(file.getFilename(), file); } } catch (MessagingException e) { throw new MailParseException(e); } mailSender.send(message); if(log.isDebugEnabled()){ log.debug("Mail was sent successfully to: " + to + " with file: "+filePath); } }} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"><value>mail.test.com</value></property> <property name="port"><value>25</value></property> <property name="protocol"><value>smtp</value></property> <property name="username"><value>no-reply@test.com</value></property> <property name="password"><value>pass</value></property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.quitwait">false</prop> </props> </property> </bean> |
1
2
3
4
5
6
| <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5"></property> <property name="maxPoolSize" value="10"></property> <property name="queueCapacity" value="40"></property> <property name="waitForTasksToCompleteOnShutdown" value="true"></property> </bean> |
No comments:
Post a Comment