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

Spring Java Discussion :

Utiliser datasource dynamique [Batch]


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    lead dev
    Inscrit en
    Février 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : lead dev

    Informations forums :
    Inscription : Février 2008
    Messages : 75
    Points : 65
    Points
    65
    Par défaut Utiliser datasource dynamique
    Bonjour,

    Je dois executer certains traitements sur des bases de données diverses et variées.
    En entrée j'ai un fichier JSON (ça aurait pu être un properties ou un CSV...) qui contient pour chaque base de données, les informations de connexion et le driver jdbc à utiliser.
    Extrait du JSON :

    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
    {
    	"databases" : [
    					{
    						"db_name" : "ma_bdd",
    						"db_pwd" : "blablabla",
    						"db_user" : "papa",
    						"db_url" : "jdbc:postgresql://localhost:5432/ma_bdd",
    						"db_driver_name" : "org.postgresql.Driver",
    						"db_tables" : [
    										{
    											"table_name" : "patient",
    											"select_query" : "select xxxx, xxxx from xxxx",
    											"update_query" : "update xxxx set xxxx= :xxxx, xxxxx= :xxxxx where id= :id"
    										}
    .........
    Donc au lancement de mon appli, je parse ce fichier JSON, je récupère les infos relatives à ma BDD, je met tout ça sous forme de jobParameters puis je lance tout ce petit monde avec mon joblauncher en croyant (a priori naIvement) que Spring va attendre de connaitre les jobParameters avant de vouloir créer ma datasource. ce qu'il ne fait pas...

    Ma conf de datasource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      @Bean
      @StepScope
      public DataSource anonymizerDatasource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setUrl("#{jobParameters['db_url']}");
        driverManagerDataSource.setUsername("#{jobParameters['db_user']}");
        driverManagerDataSource.setPassword("#{jobParameters['db_pwd']}");
        driverManagerDataSource.setDriverClassName("#{jobParameters['db_driver']}");
        return driverManagerDataSource;
      }
    Le but est d'avoir une "instance" de datasource différente à chaque lancement de job, en fonction des mes entrées en JSON.

    Avez-vous un idée de comment je dois instancier ma datasource pour qu'elle soit evaluée/chargée uniquement au runtime et donc avec les paramètres désirés ?

  2. #2
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,
    j'ai été confronté à ce problème (plus ou moins) et ma solution ça a été de créer un bean spring qui m'initialise une map de datasource.
    Et ensuite j'utilisais l'attribut factory method pour récupérer la bonne datasource

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
             <bean id="monbeanQuiInitialiseLesDatasourcesFromFileJSON"
    		class="fr..xxxx.xxxxxx">
    		<constructor-arg ref="hibernate.properties" />
    		<constructor-arg ref="config.hibernate.mapping" />
    	</bean>
            <bean id="hibernate.sessionFactory"
    		class="fr..xxxx.xxxxxx"
    		factory-method="getSessionFactoryBatch">
    		<aop:scoped-proxy />
    	</bean>
    je ne sais pas si ça peux t'aider...
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  3. #3
    Membre du Club
    Profil pro
    lead dev
    Inscrit en
    Février 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : lead dev

    Informations forums :
    Inscription : Février 2008
    Messages : 75
    Points : 65
    Points
    65
    Par défaut
    Merci Fredou !

    En fait la passage de paramètre via les jobParameters se fait dans la signature de la méthode grace à l'annotation @Value :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     @StepScope
      public DataSource anonymizerDatasource(@value("#{jobParameters['db_url']}") String url) {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setUrl(url);
        ....................
        return driverManagerDataSource;
      }

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

Discussions similaires

  1. GridView DataSource Dynamique
    Par hippoX dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/07/2007, 12h10
  2. DataSource dynamique pour fonction importation
    Par Georges_Lauret dans le forum XMLRAD
    Réponses: 1
    Dernier message: 13/06/2007, 15h59
  3. query datasource dynamique
    Par moulery dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/05/2007, 15h14
  4. Utilisation dataSource multiples
    Par Jean Luc BOUGEARD dans le forum Hibernate
    Réponses: 5
    Dernier message: 23/01/2007, 17h47
  5. Datasource dynamique
    Par Lux interior dans le forum XMLRAD
    Réponses: 10
    Dernier message: 24/08/2003, 11h02

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