【发布时间】:2021-09-08 10:38:42
【问题描述】:
我是 Spring Boot 的新手。我正在尝试编写一个利用 Spring Batch 将数据从一个数据库写入另一个数据库的应用程序。我正在阅读 Mongo 并写入 SQL Server。我将我的 JobRepository 托管在内存中,并将其编码为使用 HSQLDB。
我在将 Spring.Batch 指向正确的数据源时遇到了一些问题,因此我现在专注于确保将我的作业写入 HSQLDB。为此,我现在基本上已经注释掉了 SQL DB。
我有以下 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 WARN 31940 --- [main] o.s.b.c.c.a.DefaultBatchConfigurer:没有提供事务管理器,使用 DataSourceTransactionManager
2021-06-24 17:18:42.419 INFO 31940 --- [main] o.s.b.c.r.s.JobRepositoryFactoryBean :未设置数据库类型,使用元数据指示:HSQL
2021-06-24 17:18:43.154 WARN 31940 --- [main] JpaBaseConfiguration$JpaWebConfiguration:spring.jpa.open-in-view 默认启用。因此,可以在视图渲染期间执行数据库查询。显式配置 spring.jpa.open-in-view 以禁用此警告
我试图理解为什么会推断出数据库类型。看来我已经在设置它了。此外,当我取消注释其他数据源时,推断的类型是 SQLSERVER,这是错误的。我是否错误地初始化和设置了此数据类型的配置?
我想在再次处理多个数据源的情况之前,我会尝试让它正常工作。
【问题讨论】:
标签: java spring spring-boot spring-batch