Mein Spring Batch-Repository (bereitgestellt in einer Oracle-Datenbank) liegt in einem anderen Schema, so dass ich den Schemanamen voranstellen muss.Spring Batch-Tabellen-Präfix bei Verwendung von Java Config
Wenn XML-Konfiguration verwenden, das wäre einfach zu tun:
<job-repository id="jobRepository" table-prefix="GFA.BATCH_" />
Aber, wie ich Java Config verwenden, dies erweist sich als komplizierter zu sein. Die beste Lösung, die ich gefunden ist meiner Java Config Klasse extend DefaultBatchConfigurer
haben und überschreiben die createJobRepository()
Methode:
@Configuration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer{
@Autowired
private DataSource dataSource;
@Autowired
private PlatformTransactionManager transactionManager;
@Override
protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
factory.setTablePrefix("GFA.BATCH_");
factory.afterPropertiesSet();
return factory.getObject();
}
...
}
Im Vergleich zu der XML-Lösung, das ist ziemlich viel Code! Und es ist nicht zu logisch entweder - meine erste Vermutung ein @Bean
Verfahren zu schaffen, war wie folgt:
@Bean
public JobRepository jobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
factory.setTablePrefix("GFA.BATCH_");
factory.afterPropertiesSet();
return factory.getObject();
}
aber das würde nicht funktionieren.
Meine Frage ist: Ist meine Lösung optimal oder gibt es eine bessere? Ich würde es vorziehen, eine Bean zu definieren, anstatt irgendeine Methode irgendeiner Klasse außer Kraft zu setzen, die nicht sehr intuitiv ist ... Und natürlich wäre es sogar besser, wenn wir den Code etwas in die Nähe des einzeiligen Codes verkürzen könnten die XML-Konfiguration.