2016-04-26 14 views
1

Spring JavaMailSenderでセッションを再利用する最良の方法は何ですか?Spring JavaMailSender - セッションを使用する最良の方法

消費者がキューからメッセージを読み取り、メッセージに基づいて電子メールをトリガするシナリオでは、電子メールは順次送信されます。新しいセッションが毎回作成された場合、それはオーバーヘッドではありませんか? JavaMailSenderがシングルトンBeanの場合、常に同じセッションを使用しますか?ここで最善の解決策は何ですか?

JavaMailSenderのBean構成にJNDIセッションのサンプルが設定されているのがわかりました。私たちはJNDIをサポートしていないので、これはオプションではありません。

答えて

0

MailSendingMessageHandlerに標準JavaMailSenderを使用すると、Session!を再利用するだけです。新しいセッションが各メッセージのために作成されていることを聞いたところから

// 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; 
} 

わからない...

+0

私は現在、したがって、新しいセッションをJavaMailSenderImplの新しいインスタンスを作成しています。メッセージはキューから読み取られますが、メール送信部分はバネ統合と統合されていません。 JavaMailSenderImplとMimeMessageHelperを使用するスタンドアロンコンポーネントです。アプリケーションのどこからでもメールを送信できるようになっています。それをBeanに変換して使用すると、セッションはどのように機能しますか?任意の時点に送信されるメールは、同じセッションを使用していますか? –

+1

はい、「JavaMailSender」はシングルトンBeanでなければならず、そのセッションは再利用されます。前のセッションが終了すると、新しいセッションのみが取得されます。 Sessionはスレッドセーフなオブジェクトであるため、共有することができます。何も心配する必要はありません! –

関連する問題