Ошибка создания бина с именем 'batchConfigurer' в Spring Boot - PullRequest
0 голосов
/ 01 июня 2018

У меня есть Spring Spring, написанный с использованием Spring boot.Моя партия только читает из MongoDB и печатает запись.Я не использую SQL-БД и не имею никаких зависимостей, объявленных в проекте, но во время работы я получаю следующее исключение:

s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'batchConfigurer' defined in class path resource [org/springframework/boot/autoconfigure/batch/BatchConfigurerConfiguration$JdbcBatchConfiguration.class]: Unsatisfied dependency expressed through method 'batchConfigurer' parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-06-01 10:43:39.485 ERROR 15104 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

 ***************************
 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.

В своем файле pom.xml я добавил следующие зависимости:

spring-boot-starter-batch
spring-boot-starter-data-mongodb
spring-boot-starter-test
spring-batch-test

Вот мой класс конфигурации пакета:

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private MongoTemplate mongoTemplate;

    @Bean
    public Job job() throws Exception {
        return jobBuilderFactory.get("job1").flow(step1()).end().build();
    }

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

    @Bean
    public ItemReader<BasicDBObject> reader() {
        MongoItemReader<BasicDBObject> reader = new MongoItemReader<BasicDBObject>();
        reader.setTemplate(mongoTemplate);
        reader.setCollection("test");
        reader.setQuery("{'status':1}");
        reader.setSort(new HashMap<String, Sort.Direction>() {
            {
                put("_id", Direction.ASC);
            }
        });
        reader.setTargetType((Class<? extends BasicDBObject>) BasicDBObject.class);
        return reader;
    }

    public ItemWriter<BasicDBObject> writer() {
        MongoItemWriter<BasicDBObject> writer = new MongoItemWriter<BasicDBObject>();
        return writer;
    }

}

Вот мой класс запуска:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MyBatchApplication {
...
}

1 Ответ

0 голосов
/ 01 июня 2018

Spring Batch требует использования реляционного хранилища данных для хранилища заданий.Spring Boot подтверждает этот факт.Чтобы это исправить, вам нужно добавить базу данных в памяти или создать свой собственный BatchConfigurer, который использует хранилище на основе карты.Для записи рекомендуется добавить базу данных в памяти (HSQLDB / H2 / и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...