Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Paradigmes informatiques

Talend : enregistrer la date de dernière exécution d'un traitement

12/07/2020

Voici une classe Java de lecture et d'enregistrement de la date de dernière exécution d'un traitement, permettant ainsi de gérer un lancement différentiel sur Talend.

La classe comporte 4 méthodes pour 2 types d'usage , selon un enregistrement dans un fichier CSV ou dans une base de données.

Enregistrement dans un fichier CSV

  • ecritFichier : écrit la date actuelle avec TRAITEMENT_1 dans le fichier spécifié
    ecritFichier ("c:/monfichier.csv", "TRAITEMENT_1", new Date());
  • litFichier : renvoie la date enregistrée pour TRAITEMENT_1 depuis le fichier spécifié
    litFichier ("c:/monfichier.csv", "TRAITEMENT_1");

Enregistrement dans une base de données

Le code a été écrit pour Talend et récupère via globalMap la connexion créée sous le nom tDBConnection_1.

  • ecritTable : écrit la date actuelle avec TRAITEMENT_1 dans la table
  • ecritTable ((java.sql.Connection) globalMap.get("conn_tDBConnection_1"), "matable", "matable_date", "matable_identifiant", "TRAITEMENT_1", new Date());
  • litTable : renvoie la date enregistrée pour TRAITEMENT_1 depuis la table
    litTable ((java.sql.Connection) globalMap.get("conn_tDBConnection_1"), "matable", "matable_date", "matable_identifiant", "TRAITEMENT_1");

Code de la classe

package routines;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
/**
 * Lire ou écrire la date de début d'un traitement dans un fichier
 * Permet de gérer plusieurs dates grâce à l'utilisation d'identifiants
*
 */

public class DateDernTraitement {
    /**
     * Lecture de la date de dernier traitement
     * -> null si inexistante
     * @param sIdentifiant
     * @throws IOException
     */

 public static Date litFichier(String sFichier, String sIdentifiant) throws IOException {
   
    Date dateDernTraitement=null;
   
    if (new java.io.File(sFichier).exists()) {
        String sContenu = new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(sFichier)), java.nio.charset.StandardCharsets.UTF_8);
        // -- Recherche de la table dans la liste
        List<String> listeLignes = java.util.Arrays.asList(sContenu.split("\n"));
        int i=0;
        boolean bTrouve=false;
        while (i<listeLignes.size() && !bTrouve) {
            List<String> elemLigne = java.util.Arrays.asList(listeLignes.get(i).split(";"));       
            if (elemLigne.get(0).equals(sIdentifiant))
                {
                dateDernTraitement= TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", elemLigne.get(1));
                bTrouve=true;
                }
            else
                i++;
            }
        }
       
    return dateDernTraitement;
   
 }
 /**
 * Enregistre la date de début du prochain traitement
 * @param sFichier
 * @param sIdentifiant
 * @param dateDebutProchainTraitement
 * @throws IOException
 */

 public static void ecritFichier(String sFichier, String sIdentifiant, Date dateDebutProchainTraitement) throws IOException {
   
    String sContenuDesti="";
    if (new java.io.File(sFichier).exists())
            {
            String sContenu = new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(sFichier)), java.nio.charset.StandardCharsets.UTF_8);
   
            // -- Concatène tout sauf la ligne du la table en cours
            List<String> listeLignes = java.util.Arrays.asList(sContenu.split("\n"));
            for (int i=0; i<listeLignes.size(); i++)
                {
                if (!listeLignes.get(i).isEmpty())
                    {
                    List<String> elemLigne = java.util.Arrays.asList(listeLignes.get(i).split(";"));       
                    if (!elemLigne.get(0).equals(sIdentifiant))
                        sContenuDesti+=listeLignes.get(i) + "\n";
                    }
                }
               
               
            new java.io.File(sFichier).delete();
            }  
   
       
        // Ajoute la ligne en cours
        sContenuDesti+=sIdentifiant + ";" + TalendDate.formatDate("yyyy-MM-dd HH:mm:ss", dateDebutProchainTraitement);
   
        java.nio.file.Files.write(java.nio.file.Paths.get(sFichier), sContenuDesti.getBytes(), java.nio.file.StandardOpenOption.CREATE);
 }
   
   
    /**
     * Lecture de la date de dernier traitement
     * -> null si inexistante
     * @param sIdentifiant
     * @throws IOException
     * @throws SQLException
     */

 public static Date litTable(java.sql.Connection connexion, String sTable, String sChampDate, String sChampIdentifiant, String sValeurIdentifiant) throws IOException, SQLException {
   
    Date dateDernTraitement=null;
        java.sql.Statement statement =connexion.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
       
    String sSQL="SELECT " + sChampDate + " FROM " + sTable +
                " WHERE " + sChampIdentifiant + "='" + sValeurIdentifiant.replace("'", "''") + "'";
    java.sql.ResultSet resultat = statement.executeQuery(sSQL);
   
    // Recherche dans le retour
    if (resultat.next()){
        dateDernTraitement=resultat.getTimestamp(1);
        }
       
    return dateDernTraitement;
   
 }
 /**
 * Enregistre la date de début du prochain traitement
* @param sFichier
 * @param sIdentifiant
 * @param dateDebutProchainTraitement
 * @throws IOException
 * @throws SQLException
 */

 public static void ecritTable(java.sql.Connection connexion, String sTable, String sChampDate, String sChampIdentifiant, String sValeurIdentifiant, Date dateDebutProchainTraitement) throws IOException, SQLException {
   
        Date dateDernTraitementBase=litTable(connexion, sTable, sChampDate, sChampIdentifiant, sValeurIdentifiant);
        String sSQL;
        if (dateDernTraitementBase==null)
            {
            // Insert  
            sSQL="INSERT INTO " + sTable +" (" + sChampDate +"," + sChampIdentifiant + ")" + "VALUES ('" + (new Timestamp(dateDebutProchainTraitement.getTime())).toString() + "', '" + sValeurIdentifiant.replace("'", "''") + "')";
            }
        else
            {
            // Update
            sSQL="UPDATE " + sTable +" SET " + sChampDate + "='" + dateDebutProchainTraitement + "' WHERE "+ sChampIdentifiant + "='" + sValeurIdentifiant.replace("'", "''") + "'";
           
            }
       
        java.sql.Statement statement =connexion.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
    statement.execute (sSQL);
   
 }  
}
Dernière modification le 12/07/2020 - Quillevere.net

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations