我对春靴很陌生。我试图编写一个应用程序,利用Spring批处理将数据从一个数据库写入另一个数据库。我正在读Mongo的文章,并写到SQL Server。我在内存中托管了我的JobRepository,并已将其编码为使用HSQLDB。
我在将Spring.Batch指向适当的数据源时遇到了一些问题,所以我现在的重点是确保将我的工作写到HSQLDB。为了做到这一点,我现在基本上已经将SQL注释掉了。
我有以下BatchConfiguration类:
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {
@Autowired
@Qualifier("batchDataSource")
public DataSource batchDataSource;
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean
public JdbcTransactionManager batchTransactionManager() {
final JdbcTransactionManager transactionManager = new JdbcTransactionManager();
transactionManager.setDataSource(batchDataSource);
return transactionManager;
}
@Bean
public JobRepository jobRepositoryBean() throws Exception {
JobRepositoryFactoryBean fb = new JobRepositoryFactoryBean();
fb.setDatabaseType("HSQL");
fb.setDataSource(batchDataSource);
fb.setTransactionManager(batchTransactionManager());
return fb.getObject();
}
@Override
@Bean
protected JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(this.jobRepositoryBean());
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
}当我加载这个类时,我在日志中看到以下输出:
2021-06-24 17:18:42.412警告31940 -主o.s.b.c.c.a.DefaultBatchConfigurer :没有提供事务管理器,使用DataSourceTransactionManager 2021-06-24 17:18:42.419 INFO 31940 -主o.s.b.c.r.s.JobRepositoryFactoryBean :没有数据库类型集,使用元数据指示: HSQL 2021-06-24 17:18:43.154警告31940 --主JpaBaseConfiguration$JpaWebConfiguration :Spring.jpa.open-in默认启用。因此,可以在视图呈现期间执行数据库查询。显式配置spring.jpa.open-in-view以禁用此警告
我试图理解为什么要推断数据库类型。看来我已经把它设置好了。此外,当我取消对其他数据源的注释时,推断的类型是SQLSERVER,这是错误的。我是否不正确地初始化和设置此数据类型的配置?
我想,在再次处理多个数据源的情况之前,我应该努力让它正常工作。
发布于 2021-06-25 12:22:29
仅仅将TransactionManager和JobRepository声明为bean是不够的,Spring批处理也不会考虑到这一点。您需要为此提供一个BatchConfigurer。由于使配置类扩展了DefaultBatchConfigurer,所以可以重写getTransactionManager和getJobRepository,如下所示:
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {
@Autowired
@Qualifier("batchDataSource") // ensure this is the HSQLDB here
public DataSource batchDataSource;
@Override
public JdbcTransactionManager getTransactionManager() {
final JdbcTransactionManager transactionManager = new JdbcTransactionManager();
transactionManager.setDataSource(batchDataSource);
return transactionManager;
}
@Override
public JobRepository getJobRepository() throws Exception {
JobRepositoryFactoryBean fb = new JobRepositoryFactoryBean();
fb.setDatabaseType("HSQL");
fb.setDataSource(batchDataSource);
fb.setTransactionManager(getTransactionManager());
return fb.getObject();
}
@Override
public JobLauncher getJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(this.jobRepositoryBean());
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
}在这里的参考文档中解释了这一点:Java Config。
https://stackoverflow.com/questions/68124140
复制相似问题