IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Job avec trop connexion mysql dans une routine utilisateur


Sujet :

Développement de jobs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 48
    Par défaut Job avec trop connexion mysql dans une routine utilisateur
    Bonjour,

    J'ai un job tout simple qui possède une connexion MySQl, un Tmap et un fichier csv d'écriture en sortie.
    Dans le Tmap, j'appelle une routine utilisateur qui créé une connexion MySql, fait un select et ferme cette connexion.
    Tout va bien sauf que j'obtiens des tas de connexion en TIME_WAIT et le système finit par saturer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Erreur SQL : Data source rejected establishment of connection,  message from server: "Too many connections"
    Je pense que le problème vient de l'écriture de ma routine, mais je ne vois pas quoi faire car je ferme bien ma connexion. Pourquoi ai-je autant de connexions à se créer ?
    Faut-il passer par un autre composant Talend pour rechercher une valeur spécifique à chaque ligne ?

    Merci de votre aide,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    public static int IdLine(String varKeyaxe,String varServer, String varPort, String varDb, String varLogin, String varPass) {
        	/* Récupère l'identifiant de la ligne dans line à partir du cod_com = keyaxe */
     
        	int varIdLine = 0;
        	Connection varConnection;
        	String varAdd = "noDatetimeStringSync=true";
        	String url = "jdbc:mysql://" + varServer + ":" + varPort + "/" + varDb + "?" + varAdd;
        	java.sql.Statement statement = null;
     
        	if (varKeyaxe != null)
        	{
        	  try{
     
        		  varConnection = DriverManager.getConnection(url,varLogin,varPass);
     
        		  statement = varConnection.createStatement();
     
        		  String sql = "select IDLINE from line where COD_COMM = '" + varKeyaxe + "'";
        		  ResultSet resultat = statement.executeQuery(sql);
     
        		  while(resultat.next()){
        			  System.out.println("Je suis dans le while ! ");
        			  varIdLine = resultat.getInt(1);
        		  }
        		//interaction avec la base
        		  System.out.println("Je close le stat ! ");
        		  statement.close();
        		  System.out.println("Je close la conn ! ");
        		  varConnection.commit();
        		  varConnection.close();
        		  if (varConnection.isClosed())
        		  {
        		  }
        		  else
        		  {
        			  varConnection.close();
        			  System.out.println("Je ferme ! ");
        		  }
        		  //varConnection.close();
        		}
        		catch(SQLException sqle){
        			System.out.println("Je suis sqle ! ");
        		   System.out.println("Erreur SQL : " + sqle.getMessage());
        		   //Cf. Comment gérer les erreurs ?
        		}
        		catch(Exception e){
        			System.out.println("Je suis e ! ");
        		   System.out.println("Autre erreur : ");
        		   e.printStackTrace();
        		}
        		finally
        		{
     
        		}
        	}
        	return varIdLine;

  2. #2
    Membre Expert
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut
    JE vais supposer que tu lies des lignes de ton CSV, et pour chaque ligne tu fais une rechercher dans la table MySQL.

    Ce que tu pourrais faire c'est de lier ton fichier CSV avec un tFlowToIterate , puis tu liera le tFlowToIterate avec un tMySqlInput et dans la requête de ton mySqlInput tu pourras récupérer la ligne en cours dans le CSV et ainsi le champs qui t'intresse puis l'insérer dans la requête comme ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select * from matable where lechamps = " +  ((String) globalMap.get("row1.monChamps"))
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 48
    Par défaut
    En fait, je me suis débrouillée pour ne pas faire d'appel à ma routine java contenant des créations de connexion en boucle, du coup, seules les connexions existantes dans le job sont créées dans MySQl !

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/11/2013, 17h19
  2. [RegEx] Connexion mysql dans une classe
    Par c-zeuw dans le forum Langage
    Réponses: 3
    Dernier message: 23/11/2010, 23h08
  3. Timer dans une routine MySQl
    Par nkoss dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 17/06/2010, 15h17
  4. [VB6] Problème avec la touche 0 dans une MaskEdBox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/03/2006, 09h47
  5. utiliser mysql++ dans une classe
    Par Yevetrovitch dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 11/04/2005, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo