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 ?