0

Je souhaite exécuter quelques tâches de manière asynchrone dans une application Web. Ma question est de savoir quelle implémentation Spring des exécuteurs de tâches je devrais utiliser dans un environnement géré par conteneur.Exécution de tâche asynchrone à l'aide de Spring dans un environnement géré par conteneur

J'ai référencé à this chapitre dans la documentation de printemps et trouvé quelques options.

Une option que je considère est WorkManagerTaskExecutor. Ceci est très simple et fonctionne de manière transparente avec le serveur IBM Websepher que j'utilise actuellement, mais il est très spécifique aux serveurs IBM Websphere et Oracle Weblogic. Je ne veux pas lier mon code spécifiquement à une implémentation particulière, car dans certains régions test et locales, nous utilisons le conteneur Jetty & cette implémentation crée des problèmes pour exécuter le code dans Jetty.

D'autres options comme SimpleThreadPoolTaskExecutor ne semble pas être la meilleure solution pour tirer parti du pool de threads dans l'environnement géré par conteneur et je ne souhaite pas créer de nouveau thread moi-même.

Pourriez-vous suggérer comment je vais faire à ce sujet. Tous les pointeurs vers un exemple d'implémentation seront d'une grande aide.

Répondre

0

Comme d'habitude, cela dépend. Si vous comptez sur la gestion des threads du conteneur et que vous souhaitez définir des pools de threads sur son interface d'administration ou si vous n'êtes pas la seule application à l'intérieur du conteneur ou si vous utilisez des fonctionnalités spécifiques devrait ajouter le support pour le WorkManagerTaskExecutor et le rendre configurable. Si non, vous pouvez utiliser ce que vous voulez parce que les threads ne sont que des threads. Puisque le printemps est un conteneur IOC, vous pouvez le faire. Pour utiliser la même application partout, je ne suggérerais pas de changer la configuration XML par application. Plutôt

  1. utilisation profiles avec configuration pour définir le type d'exécuteur testamentaire et à l'intérieur de votre config java retourne le type de haricot approprié. Si vous utilisez Jetty, vous devez avoir une configuration pour les tailles de pool de threads afin de pouvoir l'accorder.

  2. utilisez spring boot like auto configuration qui s'appuient généralement sur les classes disponibles sur classpath (@ConditionalOnClass). Si votre weblogic ou websphere classes spécifiques sont disponibles ou tout autre récipient chose spécifique comme variables d'environnement, vous pouvez créer le WorkManagerTaskExecutor

Avec ces deux vous pouvez déployer la même guerre partout.