Spring JavaMailSender-使用会话的最佳方式
在SpringJavaMailSender中重用会话的最佳方法是什么 在消费者从队列中读取消息并根据消息触发电子邮件的场景中,电子邮件将一个接一个地发送。如果每次都创建一个新会话,这不是开销吗?如果JavaMailSender是一个单例bean,它是否总是使用相同的会话?这里最好的解决方案是什么Spring JavaMailSender-使用会话的最佳方式,spring,spring-integration,mail-server,Spring,Spring Integration,Mail Server,在SpringJavaMailSender中重用会话的最佳方法是什么 在消费者从队列中读取消息并根据消息触发电子邮件的场景中,电子邮件将一个接一个地发送。如果每次都创建一个新会话,这不是开销吗?如果JavaMailSender是一个单例bean,它是否总是使用相同的会话?这里最好的解决方案是什么 我看到JNDI会话的示例被设置为JavaMailSender bean配置。我们不支持JNDI,所以这不是一个选项。如果您对MailSendingMessageHandler使用标准的JavaMailS
我看到JNDI会话的示例被设置为JavaMailSender bean配置。我们不支持JNDI,所以这不是一个选项。如果您对
MailSendingMessageHandler
使用标准的JavaMailSender
,那么您只需重用会话即可
// Check transport connection first...
if (transport == null || !transport.isConnected()) {
...
try {
transport = connectTransport();
}
...
Transport transport = getTransport(getSession());
transport.connect(getHost(), getPort(), username, password);
return transport;
...
public synchronized Session getSession() {
if (this.session == null) {
this.session = Session.getInstance(this.javaMailProperties);
}
return this.session;
}
不确定从哪里听说为每条消息创建了一个新会话…如果您对MailSendingMessageHandler
使用标准的JavaMailSender
,那么您只需重新使用会话即可
// Check transport connection first...
if (transport == null || !transport.isConnected()) {
...
try {
transport = connectTransport();
}
...
Transport transport = getTransport(getSession());
transport.connect(getHost(), getPort(), username, password);
return transport;
...
public synchronized Session getSession() {
if (this.session == null) {
this.session = Session.getInstance(this.javaMailProperties);
}
return this.session;
}
不确定从哪里听说为每条消息创建了一个新会话…我目前正在创建一个JavaMailSenderImpl的新实例,因此创建了新会话。即使消息是从队列读取的,邮件发送部分也没有与spring集成集成。它是一个使用JavaMailSenderImpl和MimeMessageHelper的独立组件,可以从应用程序中的任何位置调用它来发送邮件。如果我们将其转换为bean,并在其中使用,会话是如何工作的?在任何时间点发送的邮件是否使用相同的会话?是的,JavaMailSender
必须是单例bean,并且其会话将被重用。当前一个会话已结束时,将仅获得新会话。会话是线程安全的对象,因此可以共享。没什么好担心的!我目前正在创建JavaMailSenderImpl的一个新实例,这就是新会话。即使消息是从队列读取的,邮件发送部分也没有与spring集成集成。它是一个使用JavaMailSenderImpl和MimeMessageHelper的独立组件,可以从应用程序中的任何位置调用它来发送邮件。如果我们将其转换为bean,并在其中使用,会话是如何工作的?在任何时间点发送的邮件是否使用相同的会话?是的,JavaMailSender
必须是单例bean,并且其会话将被重用。当前一个会话已结束时,将仅获得新会话。会话是线程安全的对象,因此可以共享。没什么好担心的!