如何在没有spring boot的情况下使用spring批处理的java配置?
Posted
技术标签:
【中文标题】如何在没有spring boot的情况下使用spring批处理的java配置?【英文标题】:How can I use java configuration of spring batch without spring boot? 【发布时间】:2021-10-11 06:05:57 【问题描述】:我是 Spring Batch 的新手,我正在努力了解它。 我实现了数据源和批处理配置,但它似乎不起作用,因为
Exception in thread "main" 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: Table '$tableName.batch_job_instance' doesn't exist
DataSourceConfiguration 类:
@Configuration
public class DataSourceConfiguration
@Bean
public DataSource mysqlDataSource() throws SQLException
final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriver(new com.mysql.cj.jdbc.Driver());
dataSource.setUrl("jdbc:mysql://localhost:3306/task4");
dataSource.setUsername("name");
dataSource.setPassword("password");
return dataSource;
我有 Batch 配置类,但我不知道 @EnableBatchProcessing 注解在没有 springboot 的情况下是否有效
@Configuration
@EnableBatchProcessing
@Import(DataSourceConfiguration.class)
public class BatchConfiguration
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Autowired
private DataSource dataSource;
@Bean
public ItemReader<User> itemReader()
return new JdbcCursorItemReaderBuilder<User>()
.dataSource(this.dataSource)
.name("creditReader")
.sql("select userLogin, userEmail, userPassword, accountBalance from userInfo")
.rowMapper(new UserRowMapper())
.build();
@Bean
public ItemWriter<User> simpleItemWriter()
return new SimpleUserWriter();
@Bean
public Job sampleJob()
return this.jobs.get("sampleJob")
.start(step1())
.build();
@Bean
public Step step1()
return this.steps.get("step1")
.<User,User>chunk(10)
.reader(itemReader())
.writer(simpleItemWriter())
.build();
主类包含这些代码行:
public class Demo
public static void main(String[] args) throws SQLException
ApplicationContext context = new AnnotationConfigApplicationContext(BatchConfiguration.class);
context.getBean("jobRepository");
JobLauncher jobLauncher = context.getBean("jobLauncher",JobLauncher.class);
Job job = context.getBean("sampleJob", Job.class);
try
JobExecution execution = jobLauncher.run(job, new JobParameters());
System.out.println("Job Exit Status : "+ execution.getStatus());
catch (JobExecutionException e)
System.out.println("Job ExamResult failed");
e.printStackTrace();
我该如何解决这个问题?感谢您的帮助
【问题讨论】:
【参考方案1】:错误似乎是说您缺少 Spring 批处理所需的表。
查看https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/schema-appendix.html
也可以在spring批处理核心jar文件org/springframework/bacth/core/schema-<DB>.sql
下找到为不同DB引擎准备的SQL文件
【讨论】:
以上是关于如何在没有spring boot的情况下使用spring批处理的java配置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有spring boot的情况下使用spring批处理的java配置?
Spring Boot RestController 在没有 SpringBootApplication 的情况下如何工作?
如何在没有kafka服务器的情况下运行spring boot
如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2