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