Хотите настроить работу без источника данных - PullRequest
0 голосов
/ 09 ноября 2018

Я могу запустить свое приложение Springbatch, когда источник данных был настроен в моем классе SpringbatchConfiguration. Но я не хочу, чтобы источник данных был настроен. Так что я использовал ResourcelessTransactionManager . Смотрите ниже мой класс конфигурации. Кто-то подсказывает мне, как я могу запускать задания без настройки источника данных как части конфигурации Batchjob.

@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration
//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class SprintgBatchConfiguration {

    /*@Autowired
    private DBConfiguration dbConfig;*/

    /*@Autowired
    private DataSource dataSource;

    @Autowired
    private DataSourceTransactionManager transactionManager;
    */
    //Tomcat relaated configuration//
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("124MB");
        factory.setMaxRequestSize("124MB");
        return factory.createMultipartConfig();
    }

    @Bean(name="csvjob")
    public Job job(JobBuilderFactory jobBuilderFactory,StepBuilderFactory stepBuilderFactory,ItemReader<List<CSVPojo>> itemReader,ItemProcessor<List<CSVPojo>,CsvWrapperPojo> itemProcessor,AmqpItemWriter<CsvWrapperPojo> itemWriter){
        Step step=stepBuilderFactory.get("ETL-CSV").<List<CSVPojo>,CsvWrapperPojo>chunk(100)
                .reader(itemReader)
                .processor(itemProcessor)
                .writer(itemWriter)
                .build();



        Job csvJob= jobBuilderFactory.get("ETL").incrementer(new RunIdIncrementer())
        .start(step).build();

        return csvJob;
    }

    @Bean(name="exceljob")
    public Job jobExcel(JobBuilderFactory jobBuilderFactory,StepBuilderFactory stepBuilderFactory,ItemReader<List<ExcelPojo>> itemReader,ItemProcessor<List<ExcelPojo>,ExcelWrapperPojo> itemProcessor,AmqpItemWriter<ExcelWrapperPojo> itemWriter){
        Step step=stepBuilderFactory.get("ETL-Excel").<List<ExcelPojo>,ExcelWrapperPojo>chunk(100)
                .reader(itemReader)
                .processor(itemProcessor)
                .writer(itemWriter)
                .build();

        Job ExcelJob= jobBuilderFactory.get("ETL-Excel").incrementer(new RunIdIncrementer())
        .start(step).build();

        return ExcelJob;
    }

    /*@Override
    public void setDataSource(DataSource dataSource){
        System.out.println("overriden");
    }*/

    /*@Bean
    public FlatFileItemReader<CSVPojo> fileItemReader(Resource resource){

        return null;
    }*/
    /*@Bean(name="dataSource")
    public DataSource dataSource() throws SQLException
    {


        //BasicDataSource  dataSource = new BasicDataSource();

        return dataSource;

    }*/
    @Bean(name="transactionManager")
    public ResourcelessTransactionManager transactionManager() throws SQLException{

        return new ResourcelessTransactionManager();

    }
    /*@Bean(name="transactionManager")
    public DataSourceTransactionManager transactionManager() throws SQLException{

        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(this.dataSource());
        return transactionManager;

    }*/


    /*@Bean
    public JobRepository jobRepository() throws Exception{
        JobRepositoryFactoryBean factoryBean = new JobRepositoryFactoryBean();
        factoryBean.setDatabaseType("ORACLE");
        factoryBean.setDataSource(dataSource);
        factoryBean.setTransactionManager(transactionManager);
        factoryBean.setIsolationLevelForCreate("ISOLATION_READ_UNCOMMITTED");
        return factoryBean.getObject();

    }*/

    @Bean
    public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception {
        MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
        mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
        return mapJobRepositoryFactoryBean.getObject();
    }


}

Но я получаю исключение, когда я запускаю приложение.

ationConfigEmbeddedWebApplicationContext: Возникла исключительная ситуация во время инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем fileProcessController: не удовлетворенная зависимость, выраженная через поле 'jobLauncher'; вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration ': неудовлетворенная зависимость, выраженная через поле' dataSources '; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'dataSource', определенным в ресурсе пути к классу [org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Tomcat.class]: сбой создания экземпляра компонента с помощью метода фабрики ; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.apache.tomcat.jdbc.pool.DataSource]: метод фабрики 'dataSource' вызвал исключение; Вложенным исключением является org.springframework.boot.autoconfigure.jdbc.DataSourceProperties $ DataSourceBeanCreationException: Невозможно определить класс драйвера встроенной базы данных для типа базы данных NONE. Если вы хотите встроенную базу данных, пожалуйста, поместите поддерживаемую в classpath. Если у вас есть настройки базы данных для загрузки из определенного профиля, вам может потребоваться активировать его (в настоящее время профили не активны).

Спасибо заранее !!!!

1 Ответ

0 голосов
/ 09 ноября 2018

Spring Boot предназначен для создания производственных приложений.Когда он используется для создания приложения Spring Batch, ему требуется источник данных для сохранения метаданных Spring Batch (см. BATCH-2704 ).

Но вы всегда можете использовать либо:

  • встроенный источник данных, поддерживаемый Spring Boot (H2, HSQL или Derby), просто добавив его в путь к классам.Этот источник данных будет автоматически выбран Spring Batch
  • или предоставит пользовательский BatchConfigurer и использует MapJobRepository (см. здесь )

Hopeэто помогает.

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