我收到太多电子邮件。我应该编写调度程序以便向它们发送消息。消息不同。我使用spring framework 4.x.
我可以编写连接到SMTP服务器的简单类。但在这种情况下,我也应该编写我的线程库,以便并行发送电子邮件。
Spring已经编写了库,这让我有更灵活的方式来完成这项任务吗?我不想使用线程。如果spring已经具备此功能,那就太好了。
我需要Spring集成吗?
致以最诚挚的问候,
答案 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));