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 :
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...
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" } .........
Ma conf de datasource :
Le but est d'avoir une "instance" de datasource différente à chaque lancement de job, en fonction des mes entrées en JSON.
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; }
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 ?
Partager