Spring 引导批处理 - 从数据库中读取数据,但不想将元数据写入数据库



我正在开发一个Spring Boot批处理应用程序,它将从数据库读取数据并将其写入csv文件。

当我试图运行它时,它会给我一个错误:Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

我注意到这个错误是由于spring批处理的核心程序试图写一个名为batch_job_instance的表,当我试图从数据库中读取数据时,我连接到数据库。

是否存在或配置,以便程序永远不需要对我连接到的数据库做任何事情,除了执行"select"查询以获取我的工作所需的数据?

============================== 编辑12-08-2021 ====================

你好,我试过你给的方法:

public class BatchConfig extends DefaultBatchConfigurer {
@Bean
ResourcelessTransactionManager resoucelessTransactionManager() {
return new ResourcelessTransactionManager();
}
@Bean
protected JobRepository createJobRepository() throws Exception {
MapJobRepositoryFactoryBean factoryBean = new MapJobRepositoryFactoryBean();
factoryBean.setTransactionManager(resoucelessTransactionManager());
return factoryBean.getObject();
}
@Bean
public SimpleJobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher launcher = new SimpleJobLauncher();
launcher.setJobRepository(createJobRepository());
return launcher;
}
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource;
@Bean
public Step step1(){
return stepBuilderFactory
.get("step1")
.<MT196,MT196>chunk(100)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job exportPeronJob(){
return jobBuilderFactory
.get("exportPeronJob")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
}

但是仍然得到相同的错误。

是的,它是可配置的。我们需要使用MapJobRepositoryFactoryBean和ResourcelessTransactionManager。

XML配置

<bean id="appTransactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
<bean id="appJobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="appJobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="appJobRepository" />
</bean>

Java配置
@Bean
public ResourcelessTransactionManager resourcelessTransactionManager() {
return new ResourcelessTransactionManager();
}
@Bean
public MapJobRepositoryFactoryBean mapJobRepositoryFactory(
ResourcelessTransactionManager resourcelessTransactionManager) throws Exception {
MapJobRepositoryFactoryBean factory = new 
MapJobRepositoryFactoryBean(resourcelessTransactionManager);
factory.afterPropertiesSet();
return factory;
}
@Bean
public JobRepository jobRepository(
MapJobRepositoryFactoryBean factory) throws Exception {
return factory.getObject();
}
@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
SimpleJobLauncher launcher = new SimpleJobLauncher();
launcher.setJobRepository(jobRepository);
return launcher;
}

相关内容