【问题标题】:Want to configure Job with out DataSource想要在没有 DataSource 的情况下配置 Job
【发布时间】:2019-04-13 09:15:19
【问题描述】:

当我的 SpringbatchConfiguration 类中配置了数据源时,我能够运行我的 Springbatch 应用程序。但我不想配置数据源。所以我使用了 ResourcelessTransactionManager。请参阅下面我的配置类。有人指导我如何在不将 Datasource 配置为 Batchjob 配置的一部分的情况下启动 Jobs。

@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”的bean时出错:通过字段“jobLauncher”表示不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration' 的 bean 时出错:通过字段 'dataSources' 表达的不满足依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class] 中定义名称为“dataSource”的 bean 创建时出错:通过工厂方法进行 Bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.apache.tomcat.jdbc.pool.DataSource]:工厂方法 'dataSource' 抛出异常;嵌套异常是 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException:无法确定数据库类型 NONE 的嵌入式数据库驱动程序类。如果您想要一个嵌入式数据库,请在类路径中放置一个受支持的数据库。如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有配置文件处于活动状态)。

提前致谢!!!!

【问题讨论】:

    标签: spring-boot spring-batch


    【解决方案1】:

    Spring Boot 旨在构建生产级应用程序。用于构建 Spring Batch 应用程序时,需要数据源来持久化 Spring Batch 元数据(参见BATCH-2704)。

    但您可以随时使用:

    • Spring Boot(H2、HSQL 或 Derby)支持的嵌入式数据源,只需将其添加到类路径即可。这个数据源会被 Spring Batch 自动拾取
    • 或提供自定义BatchConfigurer 并使用MapJobRepository(请参阅here

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2019-10-31
      • 1970-01-01
      相关资源
      最近更新 更多