2016-04-26 9 views
1

Was ist der beste Weg, um Sitzungen in Spring JavaMailSender wieder zu verwenden?Spring JavaMailSender - beste Methode zur Verwendung der Sitzung

In einem Szenario, in dem ein Verbraucher Nachrichten aus einer Warteschlange liest und E-Mails basierend auf den Nachrichten auslöst, werden die E-Mails nacheinander gesendet. Wenn immer eine neue Sitzung erstellt wird, ist das nicht ein Overhead? Wenn JavaMailSender eine Singleton-Bean ist, verwendet sie immer dieselbe Sitzung? Was ist die beste Lösung hier?

Ich sah Stichproben von JNDI-Sitzungen in JavaMailSender-Bean-Konfiguration festgelegt. Wir haben keine Unterstützung für JNDI, also ist das keine Option.

Antwort

0

Wenn Sie den Standard JavaMailSender für die MailSendingMessageHandler verwenden, so verwenden Sie einfach die 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; 
} 

Nicht sicher von wo aus man gehört, dass eine neue Sitzung für jede Nachricht erstellt wird ...

+0

ich zur Zeit eine neue Instanz von JavaMailSenderImpl zu schaffen, damit die neue Sitzung. Obwohl die Nachricht aus einer Warteschlange gelesen wird, ist der E-Mail-Sendeteil nicht mit der Federintegration integriert. Es ist eine eigenständige Komponente mit JavaMailSenderImpl und MimeMessageHelper, die von überall in der Anwendung zum Senden einer E-Mail aufgerufen werden kann. Wenn wir es in eine Bean konvertieren und es übergreifend verwenden, wie funktioniert die Sitzung? Wird zu irgendeinem Zeitpunkt eine E-Mail gesendet, die dieselbe Sitzung verwendet? –

+1

Ja, 'JavaMailSender' muss eine Singleton-Bean sein und ihre Sitzung wird wiederverwendet. Nur eine neue Sitzung wird erhalten, wenn der vorherige tot ist. Sitzung ist ein Thread-sicheres Objekt und kann daher gemeinsam genutzt werden. Nichts, über das man sich sorgen sollte! –

Verwandte Themen