我应该使用哪个spring库来发送带有多线程的电子邮件

时间:2015-03-11 13:04:55

标签: multithreading spring spring-mvc spring-integration

我收到太多电子邮件。我应该编写调度程序以便向它们发送消息。消息不同。我使用spring framework 4.x.

我可以编写连接到SMTP服务器的简单类。但在这种情况下,我也应该编写我的线程库,以便并行发送电子邮件。

Spring已经编写了库,这让我有更灵活的方式来完成这项任务吗?我不想使用线程。如果spring已经具备此功能,那就太好了。

我需要Spring集成吗?

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:2)

是的,你绝对可以使用Spring Integration做到这一点,因为有一个ExecutorChannel实现,可以从Spring Core提供TaskExecutor

<channel id="sendEmailChannel">
   <dispatcher task-executor="threadPoolTaskExecutor"/>
</channel>

<int-mail:outbound-channel-adapter channel="sendEmailChannel" mail-sender="mailSender"/>

但无论如何,您应该记住,所有Spring Integration组件都基于Java,并且ExecutorService在后​​台使用。

从另一方面来说,如果你只需要从Spring Integration发送邮件的东西,这将是一个开销,可以简单地使用像JavaMailSender这样的Core Spring Framework作为bean而@Async作为sendMail {1}}实现parallel要求的方法。

<强>更新

  你可以告诉我这种情况是否需要JMS吗?

我在这里看不到任何与JMS相关的内容。您的解决方案中没有(或至少不显示)任何真正的integration点。我甚至可以说Spring Integration只是用于电子邮件发送。但是使用Spring Boot,你的SI配置就足够了。从另一方面来说,如果你将更好地学习Spring Integration,你将获得更多的收益来依赖你的系统的集成组件,如内部,以及通过JMS,AMQP,Kafka等外部与其他系统。

说实话:很多年前我第一次认识Spring Integration是因为需要从FTP获取文件并能够自动获取新文件。我只在Spring Integration 1.0.0.M1中找到了解决方案。在<int-ftp:inbound-channel-adapter>的简短XML配置之后,我喜欢Spring Integration,从那时起它就成了我生活的一部分。 : - )

因此,您可以在简单的应用程序中继续使用Spring Integration,或者只需使用JavaMailSender直接使用的更正式的解决方案。

答案 1 :(得分:1)

您应该使用java executors框架。例如,您可以编写类似下面代码的内容:

ExecutorService executor = Executors.newWorkStealingPool();
executor.execute(() -> mailSender.send(mail));