Spring boot 要在没有数据源的情况下配置作业吗

Spring boot 要在没有数据源的情况下配置作业吗,spring-boot,spring-batch,Spring Boot,Spring Batch,在SpringbatchConfiguration类中配置数据源时,我能够运行Springbatch应用程序。但我不想配置数据源。因此,我使用了ResourceleStransactionManager。请参见下面我的配置类。有人指导我如何在不将Datasource配置为Batchjob配置的一部分的情况下启动作业 @Configuration @EnableBatchProcessing @EnableAutoConfiguration //@EnableAutoConfiguration(e

在SpringbatchConfiguration类中配置数据源时,我能够运行Springbatch应用程序。但我不想配置数据源。因此,我使用了ResourceleStransactionManager。请参见下面我的配置类。有人指导我如何在不将Datasource配置为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();
    }


}
@配置
@启用批处理
@启用自动配置
//@EnableAutoConfiguration(排除={DataSourceAutoConfiguration.class})
公共类SprintgBatchConfiguration{
/*@自动连线
私有数据库配置数据库配置*/
/*@自动连线
私有数据源;
@自动连线
私有数据源transactionManager transactionManager;
*/
//Tomcat相关配置//
@豆子
公共MultipartConfigElement MultipartConfigElement(){
MultipartConfigFactory工厂=新的MultipartConfigFactory();
setMaxFileSize(“124MB”);
factory.setMaxRequestSize(“124MB”);
返回factory.createMultipartConfig();
}
@Bean(name=“csvjob”)
公共作业作业(JobBuilderFactory JobBuilderFactory、StepBuilderFactory StepBuilderFactory、ItemReader ItemReader、ItemProcessor ItemProcessor、AmqItemWriter itemWriter itemWriter){
Step Step=stepBuilderFactory.get(“ETL-CSV”).chunk(100)
.reader(itemReader)
.processor(项目处理器)
.writer(项目编写器)
.build();
Job csvJob=jobBuilderFactory.get(“ETL”).incrementer(新的RunIdIncrementer())
.start(步骤).build();
返回csvJob;
}
@Bean(name=“exceljob”)
公共作业jobExcel(JobBuilderFactory JobBuilderFactory、StepBuilderFactory StepBuilderFactory、ItemReader ItemReader、ItemProcessor ItemProcessor、AmqItemWriter itemWriter itemWriter){
Step-Step=stepBuilderFactory.get(“ETL Excel”).chunk(100)
.reader(itemReader)
.processor(项目处理器)
.writer(项目编写器)
.build();
Job ExcelJob=jobBuilderFactory.get(“ETL Excel”).incrementer(新的RunIdIncrementer())
.start(步骤).build();
返回工作岗位;
}
/*@凌驾
public void setDataSource(数据源数据源){
System.out.println(“覆盖”);
}*/
/*@豆子
公共FlatFileItemReader fileItemReader(资源){
返回null;
}*/
/*@Bean(name=“dataSource”)
公共数据源DataSource()引发SQLException
{
//BasicDataSource数据源=新的BasicDataSource();
返回数据源;
}*/
@Bean(name=“transactionManager”)
public ResourcesTranslationManager transactionManager()引发SQLException{
返回新的ResourcesTransactionManager();
}
/*@Bean(name=“transactionManager”)
公共数据源transactionManager transactionManager()引发SQLException{
DataSourceTransactionManager transactionManager=新的DataSourceTransactionManager(this.dataSource());
返回事务管理器;
}*/
/*@豆子
public JobRepository JobRepository()引发异常{
JobRepositoryFactoryBean factoryBean=新的JobRepositoryFactoryBean();
setDatabaseType(“ORACLE”);
setDataSource(dataSource);
setTransactionManager(transactionManager);
setIsolationLevelForCreate(“隔离读取未提交”);
返回factoryBean.getObject();
}*/
@豆子
public JobRepository JobRepository(ResourceLessTranslationManager transactionManager)引发异常{
MapJobRepositoryFactoryBean MapJobRepositoryFactoryBean=新的MapJobRepositoryFactoryBean(transactionManager);
mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
返回mapJobRepositoryFactoryBean.getObject();
}
}
但当我运行应用程序时,我会遇到以下异常

ationConfigEmbeddedWebApplicationContext:在上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatifiedPendencyException:创建名为“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批处理应用程序时,它需要一个数据源来持久化Spring批处理元数据(请参阅)

但您始终可以使用以下任一选项:

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