Требуется параметр 1 метода batchConfigurer в org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration $ JdbcBatchConfiguration

Я использую Spring Batch и использую аннотацию @Scheduler для планирования задания с определенной периодичностью.

Из сообщения об ошибке похоже, что Spring Boot ожидает по крайней мере записи, связанной с Spring DataSource, но мне это не нужно, потому что я сейчас не имею дело с БД.

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of method batchConfigurer in org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration$JdbcBatchConfiguration required a bean of type 'javax.sql.DataSource' that could not be found.
    - Bean method 'dataSource' not loaded because @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'jndi-name'
    - Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required class 'javax.transaction.TransactionManager'


Action:

Consider revisiting the conditions above or defining a bean of type 'javax.sql.DataSource' in your configuration.

application.properties

cron.job.expression=*/1 * * * *

Другой класс:

@Configuration
@EnableBatchProcessing
@Primary
public class ScheduledDomainJob {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job scheduledJob() {
        return jobBuilderFactory.get("scheduledJob").flow(step1()).end().build();
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1").<Domain, Domain>chunk(10)
                .reader(reader()).writer(writer()).build();
    }

    @Bean
    public FlatFileItemReader<Domain> reader() {
        FlatFileItemReader<Domain> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource("csv/domain-1-03-2017.csv"));
        reader.setLineMapper(new DefaultLineMapper<Domain>() {{
            setLineTokenizer(new DelimitedLineTokenizer() {{
                setNames(new String[]{"id", "domain"});
            }});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<Domain>() {{
                setTargetType(Domain.class);
            }});
        }});
        return reader;
    }

    @Bean
    public CustomWriter writer() {
        CustomWriter writer = new CustomWriter();
        return writer;
    }

    @Bean
    public RunScheduler scheduler() {
        RunScheduler scheduler = new RunScheduler();
        return scheduler;
    }
}

CustomerWriter.java

@Slf4j
public class CustomWriter implements ItemWriter<Domain> {

    @Override
    public void write(List<? extends Domain> items) throws Exception {
        log.info("writer ....... " + items.size());
        for (Domain domain : items) {
            log.info(domain + "\n");
        }
    }
}
2
0
2 268
2

Ответы 2

Определите следующую аннотацию для своего класса инициализации Springboot.

@EnableAutoConfiguration (exclude = {DataSourceAutoConfiguration.class})

Если это не сработает, попробуйте добавить H2 или hsqldb в зависимости maven.

Правильно, спасибо. Я получаю еще одну ошибку, почему мы должны ее исключить?

Jeff Cook 07.07.2018 11:39

Надеюсь, вы используете версию 2 с весенней загрузкой. Вы можете внести некоторые изменения в код, как показано ниже.

@EnableBatchProcessing
@Primary
public class ScheduledDomainJob extends DefaultBatchConfigurer

Определите следующую аннотацию для вашего класса приложения с весенней загрузкой.

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

Вы можете найти более подробную информацию на Пример Spring Batch Hello world с использованием Spring загрузки

Другие вопросы по теме