Dans mon projet d'animal de compagnie, j'ai un long travail de course, je souhaite montrer le statut à l'utilisateur sur le processus et jusqu'où il est allé. Ainsi, vous poussez les objets d'état sur la rubrique JMS à partir de là, vous ramassez l'application et l'alimentation vers WS pour les diffuser à un client valide. J'ai écrit des coupes sur le point au printemps AOP (à savoir @Before, @afterreturn) et appelez mon service pour envoyer le message au sujet. Maintenant, je veux enregistrer l'état du service non sur la méthode Démarrer ou après le retour à l'intérieur de la méthode. J'ai donc appelé le service (qui a JMStamplete injecté et a pris un objet de statut). Y a-t-il un moyen de minimiser ces appels afin que je ne puisse pas répéter les appels de service. Voici mon code sudo.
public class Myservice{ UserDao userDao; LegService legservice; ProviderDao providerDao; .... StatusServive statusServie; //aop will call the same service to send info to JMS topic fetchandCalculateLeg(){ // here i called statusServie.senStatus(StatusObject); List<Users> = userDao.fetchUserInfo(); // here i called statusServie.senStatus(StatusObject); .... loop: #forEachUser // here i called statusServie.senStatus(StatusObject); someList = legservice.fecthLegInfoForEachUser(); // here i called statusServie.senStatus(StatusObject); :endloop; .... } }
4 Réponses :
Si vous utilisez une performance AOP sera meilleur que celui-ci, car il est bien testé et optimisé Cadre pour effectuer de telles opérations. Quoi qu'il en soit, vous pouvez vérifier en soustrayant le temps de début et de fin.
Vous pouvez utiliser votre code actuel et votre code implémenté pour vérifier les performances. Ce serait un travail très intéressant. Faites quelque chose comme ci-dessous pour définir le temps de démarrage et de fin et soustrayez. P> Syntaxe, retourne l'heure actuelle en millisecondes. Notez que si l'unité de temps de la valeur de retour est une milliseconde, la granularité de la valeur dépend du système d'exploitation sous-jacent et peut être plus grande. Par exemple, de nombreux systèmes d'exploitation mesurent le temps en unités de dizaines de millisecondes.
Voir la description de la date de la classe pour une discussion de légères divergences pouvant survenir entre «l'heure de l'ordinateur» et une durée universelle coordonnée (UTC). P> Il existe de nombreux cadres AOP OpenSource disponibles. P> Spring AOP fort>: AOP avec cadre de ressort. Annonces. L'un des éléments clés du cadre de printemps est le cadre de programmation orienté orienté (AOP). La programmation axée sur l'aspect implique de décomposer la logique de programme dans des pièces distinctes appelées prétendues préoccupations. P> Li>
aspectj: strong> asphapj est une extension d'aspect sans soudure vers le langage de programmation Java, la plate-forme Java compatible et facile à apprendre et à utiliser. AspectJ permet la modularisation propre des préoccupations transversales telles que: vérification des erreurs et manutention, synchronisation, comportement contextuel, optimisations de performances, surveillance et journalisation, support de débogage, protocoles multi-objets. P> LI>
edit 1 strong> p> printemps prend également en charge l'aspectj. Je l'ai testé avec Aspectj 1.7.2 Il ne montre pas une fuite de mémoire. Vous pouvez reproduire la même chose dans votre application en créant beaucoup de haricots, puis en prenant la décharge de tas après un certain temps, la collection de déchets nécessite un certain temps, ce n'est pas instantané. P> comme, selon mes tests. La performance est décente avec un énorme nombre d'appels. P> Exemple simple est disponible à Mkyong: http://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/ p> Note: strong> vous Devrait modifier vos performances de la question est la durée et l'espace mesurés. Et, selon votre commentaire, on dirait que vous demandez plus d'optimisation de la mémoire ou de gestion de la gestion. En outre, votre sujet de question est différent de la question. P> p>
@Praiyush Merci de répondre mon problème n'est pas avec l'heure (même s'il s'agit de ma moins de préoccupation pour le moment), je cherche particulièrement la consommation de mémoire et le tas comme mentionné ici Link Heureusement, ils sont fixés en 4.2. Donc, comme ça y a-t-il des inquiétudes quiconque au courant. Je suis également googling pour en savoir plus sur différents types de situation, un développeur confronté (pas tous, à la recherche uniquement qui convient à ma situation). Vous pouvez donc modifier votre réponse si vous avez d'autres informations à ce sujet. Merci encore.
Merci à essayer pourriez-vous partager le résultat du test de la fuite de mémoire.
Ce que vous demandez n'est pas clair, le titre de la question est trompeur. P>
Vous pouvez vraiment utiliser le Spring AOP pour la tâche que vous souhaitez faire, il vous suffit d'injecter avec des appels de journaux les méthodes FetchUserInfo () et FecThleginFoforesher () et similaires. Vous pouvez également utiliser @around pour avoir un meilleur contrôle. P>
Pour le côté de la performance, étant donné que ce morceau de code est très limité, vous pouvez facilement faire du profil avec et sans AOP. N'oubliez pas que l'AOP pour la journalisation est très largement utilisé et le ressort crée des objets proxy pour de nombreuses entités et objectifs, comme des usines, de sorte que les usines sont bien testées et performantes. P>
Si vous ne comprenez pas la question, faites-le dire dans un commentaire non dans une réponse.
Désolé, vous avez raison mais je n'ai pas été autorisé à commenter au moment de la publication.
(1) Les tâches de fonctionnement longues signifient 'emplois', vous pourriez donc avoir besoin de: quartz p>
(2) Si vous voulez simplement savoir où votre programme passe, vous aurez peut-être besoin d'un outil de journalisation comme suit: LOWBACK < /a>.Unappender bien défini résoudra votre problème. P>
Les réponses ne sont donc pas destinées à recommander des outils ou des bibliothèques.
Si vous avez un travail aussi durable, pourquoi ne le mettez-vous pas dans une heure d'exécution de printemps? Mettre en œuvre le lecteur personnalisé -> processeur -> écrivain et le système feront tout pour vous. Et pour afficher les détails de ces exécutions d'emploi, j'ai créé un tel dto https://gist.github.com/idyoshin / b035317db8c61b1b49ccb8898848171e et collectionneur https://gist.github.com/idyoshin/74ad80841a51e1be62208f3fd58eeb6a . Ces utilitaires, sont des contourements, car je n'ai pas voulu incorporer une application d'administration Spring-Batch dans mon application principale. Je les utilise pour afficher les détails de l'exécution active / archive d'emplois spécifiques (basé sur des noms) de mon système. p>
Utiliser également de tels utilitaires, vous pouvez implémenter un collecteur de données basé sur la minuterie personnalisé, qui repoussera ces données sur JMS ou WebSocket. Spring-lot a également de bons auditeurs, que vous pouvez implémenter, par exemple personnalisé Contrairement à votre solution AOP initiale, une approche avec le lot de printemps sera en avant, (code PURE Java), et vous résoudra également de problème supplémentaire: transactions de grandes mises à jour de longue durée: elle coupera l'ensemble de l'ensemble de données dans des morceaux et traitent chaque morceau en transaction unique. p> org.springframework.batch.core.chunklistener code> vous permettra de faire des mises à jour "Progress-Bar", vous saurez le moment Lorsque votre morceau a été traité, et donc la mise à jour de progression apparue. p>
Votre titre de question ne semble pas être reflété dans votre question.