Si vous utilisez déjà la programmation Java et que vous utilisez n'importe quel cadre populaire comme Spring et Hibernate, vous devriez être familier avec l'utilisation des annotations. Lorsque vous travaillez avec un cadre existant, il suffit généralement d'utiliser son annotation. Mais devez-vous parfois créer votre propre besoin de créer votre propre annotation?
Il n'y a pas longtemps, j'ai trouvé une raison de créer une annotation, qui était un projet qui impliquait des données communes stockées dans une variété de bases de données.
Description de la scène
L'entreprise a une variété de bases de données qui stockent les mêmes données, et ils ont leurs propres façons de maintenir la mise à jour des données. problème.
Cependant, avant le début du projet, l'entreprise doit savoir dans quelle mesure la distance de données peut être synchronisée et faire des modifications nécessaires pour la synchroniser. . Et vérifiez sa valeur, mettez en évidence les enregistrements qui ne remplissent pas les conditions.
annotation
Après un certain temps, je me suis exposé, j'ai décidé d'utiliser des annotations pour conduire la configuration de la comparaison des données et du traitement des rapports. La configuration ne sera pas cachée dans un fichier dans un certain endroit de ClassPath.
Dans le cas le plus simple, l'annotation n'est rien de plus qu'une marque, juste pour fournir des informations qui fournissent des informations sans le fonctionnement de l'exécution du code lui-même. sont familiers, mais vous n'avez peut-être jamais le besoin de créer votre propre annotation.
Voici un exemple de ce projet:
@Target (elementType.field) @ retentionPolicy.runtime) public @Interface Reconfield {/ *** La valeur indique que la valeur des sources spécifiées doit être comparée ou sera utilisée pour afficher la valeur ou la référence dans une exécution. Renvoie la valeur si la source doit être comparée, par défaut. ) La valeur par défaut de réconfortation de ReconDisplay. La valeur indique l'étiquette qui doit être affichée dans le rapport pour le feu. ;}
Il s'agit de l'annotation principale de la façon dont le processus de comparaison des données de conduite fonctionne. Discutez-en plus tard.
L'annotation de Target vous permet de spécifier que votre annotation doit être utilisée sur cet élément Java.
@Retention, qui vous permet de spécifier lorsque l'annotation est efficace.
Ce processus de vérification des données exécutera une requête pour chaque base de données et mappera les résultats du bean d'entité qui montre le bean d'entité de tous les champs pour les types de dossiers commerciaux spécifiques. Quelques exemples pour comprendre comment ces annotations sont utilisées dans différentes configurations de comparaison de données.
Afin de vérifier les valeurs existantes et de ne correspondre qu'à la correspondance précise de chaque source de données, vous n'avez qu'à fournir un ID de champ et le marquage du champ sur le rapport.
@ReConfield (id = client_id, label = "Customer ID") Private String CustomerId;
Afin de montrer la valeur trouvée dans chaque source de données, mais sans aucune comparaison de données, vous devrez peut-être faire l'élément ComparreSources et définir la valeur sur FALSE.
@ReConfield (id = name, label = "name", compareSources = false) name de chaîne privée;
Afin de vérifier la valeur trouvée dans la source de données désignée, pas tous, vous pouvez utiliser ElementsourCestocompare. La manière, certains scénarios de données qui ne sont pas stockés dans chaque source de données peuvent être traités.
@ReConfield (id = private_placement_flag, label = "Flag de placement privé", SourcestoCompare = {Reconsource.Legacy, Reconsource.pace} g PriveplacementFlag;
Nous avons maintenant répondu à nos besoins de base et nous devons résoudre le problème de la mise en œuvre du champ spécifié pour les capacités de comparaison de données complexes.
@Target (elementType.field) @retention (retentionPolicy.runtime) public @Interface ReconCustomRule {/ *** Valeur indique les paramètres utilisés pour instanter un processeur de règle personnalisé, la valeur par défaut n'est pas des paramètres. ] Des paramètres pour instancier une exécution personnalisée, * / string [] params () par défaut {}; du processeur de règles personnalisés. * / class <?> processeur () DefaultreConrule.class;}
Il est très similaire aux annotations précédentes. devra mettre en œuvre une interface de règles universelle.
Jetons maintenant un coup d'œil à l'exemple de l'utilisation de cette annotation.
Dans cet exemple, nous utilisons une règle personnalisée qui vérifie si la bourse est les États-Unis. Record.
@ReConfield (id = street_cusip, label = "Street Cusip", compareSources = false) @reConCustomrule (processeur = skipNonUsexChangeCaparisonrule.class) ate String streetCusip;
Ici, nous spécifions un paramètre pour les règles personnalisées. Pour appliquer le même ensemble de règles personnalisées à plusieurs champs.
@ReConfield (id = usd_mkt_cap, label = "bourse CAP USD", displayformat = recondisplayformat.numeric_whole, sourcestocompare = {reconsource. 10000 "}) BigDecimal privé USDMKTCAP;
Comme vous pouvez le voir, nous n'utilisons que quelques annotations simples, et nous avons conçu une fonction de rapport de vérification des données avec un degré considérable de flexibilité dans un scénario de bibliothèque multi-données. . Par conséquent, nous utilisons réellement l'annotation pour calculer les entités de données de cartographie trouvées et les utiliser directement pour le traitement.