Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JavaMailSender-使用会话的最佳方式_Spring_Spring Integration_Mail Server - Fatal编程技术网

Spring JavaMailSender-使用会话的最佳方式

Spring JavaMailSender-使用会话的最佳方式,spring,spring-integration,mail-server,Spring,Spring Integration,Mail Server,在SpringJavaMailSender中重用会话的最佳方法是什么 在消费者从队列中读取消息并根据消息触发电子邮件的场景中,电子邮件将一个接一个地发送。如果每次都创建一个新会话,这不是开销吗?如果JavaMailSender是一个单例bean,它是否总是使用相同的会话?这里最好的解决方案是什么 我看到JNDI会话的示例被设置为JavaMailSender bean配置。我们不支持JNDI,所以这不是一个选项。如果您对MailSendingMessageHandler使用标准的JavaMailS

在SpringJavaMailSender中重用会话的最佳方法是什么

在消费者从队列中读取消息并根据消息触发电子邮件的场景中,电子邮件将一个接一个地发送。如果每次都创建一个新会话,这不是开销吗?如果JavaMailSender是一个单例bean,它是否总是使用相同的会话?这里最好的解决方案是什么


我看到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,并且其会话将被重用。当前一个会话已结束时,将仅获得新会话。会话是线程安全的对象,因此可以共享。没什么好担心的!