Я следовал примеру, чтобы запустить Spring Batch Admin как загрузочное приложение spring- batch-admin-spring-boot
Это работает, как ожидалось. Я добавил новую конфигурацию с именем BatchConfiguration, определенную как:
package spring.batch.jobs;
... imports ...
@Configuration
public class BatchConfiguration {
@Autowired
private Environment env;
@Autowired
public PlatformTransactionManager transactionManager;
@Autowired
public JobRepository jobRepository;
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public DataSource dataSource;
@Bean
public PlatformTransactionManager transactionManager(DataSource ds) {
return new DataSourceTransactionManager(ds);
}
@Bean
public StepBuilderFactory makeStepBuilderFactory() {
return new StepBuilderFactory(jobRepository, transactionManager);
}
@Bean
public JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
String isolationLevelForCreate = env.getProperty("batch.repository.isolationlevelforcreate");
if (isolationLevelForCreate != null) {
factory.setIsolationLevelForCreate(isolationLevelForCreate);
}
String tablePrefix = env.getProperty("batch.repository.tableprefix");
if (tablePrefix != null) {
factory.setTablePrefix(tablePrefix);
}
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public JobBuilderFactory makeJobBuilderFactory() {
return new JobBuilderFactory(jobRepository);
}
@Bean
public DataSource dataSource(Environment e) {
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
ds.setDriverClassName(e.getProperty("batch.jdbc.driver"));
ds.setUsername(e.getProperty("batch.jdbc.user"));
ds.setPassword(e.getProperty("batch.jdbc.password"));
ds.setUrl(e.getProperty("batch.jdbc.url"));
return ds;
}
// tag::readerwriterprocessor[]
@Bean
public FlatFileItemReader<Person> reader() {
FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
reader.setResource(new ClassPathResource("sample-data.csv"));
reader.setLineMapper(new DefaultLineMapper<Person>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[]{"firstName", "lastName"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
setTargetType(Person.class);
}});
}});
return reader;
}
@Bean
public PersonItemProcessor processor() {
return new PersonItemProcessor();
}
@Bean
public JdbcBatchItemWriter<Person> writer() {
JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<Person>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());
writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
writer.setDataSource(dataSource);
return writer;
}
// end::readerwriterprocessor[]
// tag::jobstep[]
@Bean
public Job importUserJob() {
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person>chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
// end::jobstep[]
}
Затем я импортировал эту конфигурацию в MainConfiguration, добавив класс в аннотацию импорта.
После запуска приложения я не вижу importUserJob
в списке на странице вакансий. Как я могу правильно зарегистрировать свою работу с помощью администратора Spring Batch, чтобы она была указана и запускалась из пользовательского интерфейса?