fils de fond tomcat
-
19-09-2019 - |
Question
J'ai un tomcat 6,20 instance en cours d'exécution, et que vous souhaitez envoyer un e-mail via un fil d'arrière-plan pour empêcher la fonction d'envoi de courrier électronique de bloquer la demande.
Est-il possible que je peux exécuter le fil en arrière-plan, tout en permettant l'écoulement normal de la page se produire.
L'application est écrite en ICEfaces.
Merci.
La solution
- Créer un
Executor
en utilisantjava.util.concurrent.Executors.newCachedThreadPool
(ou l'une des autres méthodes d'usine) dans votre méthode d'initialisation du contrôleur / servlet. - Lorsqu'une demande arrive, envelopper la logique l'envoi du courrier dans un
java.lang.Runnable
- Soumettre le
Runnable
à laExecutor
Ceci effectuera l'envoi en arrière-plan. Rappelez-vous de créer un seul Exécuteur au démarrage, et de partager à travers toutes les demandes; ne pas créer une nouvelle Exécuteur chaque fois (vous pouvez, mais ce serait un peu lent et gaspillage).
Autres conseils
Mettez votre e-mail envoyer à la place de Thread.sleep()
. Mettez votre sortie à la place de sendRedirect()
.
public void doUrlRequest(HttpServletRequest request, HttpServletResponse response) {
try {
response.sendRedirect("/home");
} catch (IOException e) {
CustomLogger.info(TAG, "doUrlRequest", "doUrlRequest(): "+e.getMessage());
}
(new Thread() {
public void run() {
try {
Thread.sleep(9000);
System.out.println("Awoken!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
Je l'ai trouvé un moyen de sortir. Ces balises
@PostConstruct()
et
@PreDestroy()
Créer 2 méthodes dans votre servlet qui renvoient vide et accepter aucun paramètre. placez le 1er étiquette immédiatement au-dessus de la première méthode et la 2e balise ci-dessus deuxième balise.
Essense des tags
La méthode @PostConstruct est appelée par le conteneur avant la classe implémentant commence répondre aux clients des services Web.
La méthode de @PreDestroy est appelée par le conteneur avant le point final est retiré de fonctionnement.
dans le procédé après la construction () créer votre fil en utilisant l'interface exécutable et le faire tourner dans une boucle infinie à moins que la valeur d'une certaine variable booléenne est fausse.
utiliser la méthode PreDestroy () pour définir la variable booléenne à faux.