当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot配置JobRepositoryFactoryBean的Spring批处理

章昱
2023-03-14

我是新的Spring批与引导。我在使用postgres配置jobRepositoryFactory bean作为数据库时遇到了一个问题。下面是我的配置类。

@Configuration
@EnableBatchProcessing
@Import(DataSourceConfiguration.class)
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    private PlatformTransactionManager transactionManager;

    private final DataSourceConfiguration dataSourceConfiguration;

public BatchConfiguration(DataSourceConfiguration dataSourceConfiguration) {
    this.dataSourceConfiguration = dataSourceConfiguration;
}


    @Bean
    public ElasticReader elasticReader()  {
        return new ElasticReader();
    }

@Bean
public JobRepository jobRepositoryFactoryBean() throws Exception {
    JobRepositoryFactoryBean fb = new JobRepositoryFactoryBean();
    fb.setDatabaseType("postgres");
    fb.setDataSource(dataSourceConfiguration.dataSource());
    fb.setTransactionManager(transactionManager);
    return fb.getObject();
}

@Bean
public PlatformTransactionManager platformTransactionManager() {
    return transactionManager;
}

    @Bean
    public StageReader stageReader(){
        return new StageReader();
    }

    @Bean
    public DocumentItemProcessor processor() {
        return new DocumentItemProcessor();
    }

    @Bean
    public ExcelWiter writer() {
        return new ExcelWiter();
    }

    @Bean
    public StageWriter stageWriter() {
        return new StageWriter();
    }

    @Bean
    public Job importUserJob() {
        return jobBuilderFactory.get("importUserJob")
                .incrementer(new RunIdIncrementer())
                .flow(step1())
                .next(step2())
                .end()
                .build();
    }


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


    @Bean
    public Step step2() {
        return stepBuilderFactory.get("step2")
                .<List<OnboardConfigVO>,List<ExportVO>> chunk(10)
                .reader(elasticReader())
                .processor(processor())
                .writer(writer())
                .build();
    }

}
@PropertySource("classpath:/batch-postgresql.properties")
public class DataSourceConfiguration {

@Autowired
private Environment environment;

@Autowired
private ResourceLoader resourceLoader;

@PostConstruct
protected void initialize() {
     ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
 populator.addScript(resourceLoader.getResource(environment.getProperty("bach.schema.script")));



    populator.setContinueOnError(true);
    DatabasePopulatorUtils.execute(populator , dataSource());
}

@Bean(destroyMethod="close")
public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName
       (environment.getProperty(batch.jdbc.driver");
       dataSource.setUrl(environment.getProperty("batch.jdbc.url"));
    dataSource.setUsername(environment.getProperty("batch.jdbc.user"));

dataSource.setPassword(environment.getProperty("batch.jdbc.password"));
    return dataSource;
}

下面是Spring boot App run的输出

Using default security password: f5cddd58-4790-427c-83b8-b6c25044db7f

   2017-08-09 09:36:59.589  INFO 42576 --- [           main] 
o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: 
 OrRequestMatcher [requestMatchers=[Ant [pattern='/css/**'], Ant 
 [pattern='/js/**'], Ant [pattern='/images/**'], Ant 
 [pattern='/webjars/**'], Ant [pattern='/**/favicon.ico'], Ant 
[pattern='/error']]], []
   2017-08-09 09:36:59.785  INFO 42576 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 9199 (http)
  2017-08-09 09:36:59.790  INFO 42576 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: []
  2017-08-09 09:36:59.794  INFO 42576 --- [           main] o.s.b.c.r.s.JobRepositoryFactoryBean     : No database type set, using meta 
   data indicating: POSTGRES
  2017-08-09 09:36:59.798  INFO 42576 --- [           main] 
    o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, 
    defaulting to synchronous executor.

我已经在我的configuration类中配置了bean。我错过了什么?

共有1个答案

屠建本
2023-03-14

请尝试以下操作。

@Autowired
private DataSource dataSource;

并将FB.SetDataSource(DataSourceConfiguration.dataSource());替换为FB.SetDataSource(dataSource);

 类似资料:
  • 我开始学习spring batch,遇到一个问题,当我想使用在数据库中持久化作业的状态时。编译器显示: “原因:org.springframework.beans.factory.beanCreationException:创建类路径资源[springconfig.xml]中定义的名为'job repository'的bean时出错:调用init方法失败;嵌套异常为java.lang.noClas

  • Spring Integration Java DSL Reference和Spring Batch Java配置文档说明了如何将Java配置用于Spring Integration和Spring Batch。 但它们没有说明如何为Spring批处理集成配置它。如何使用DSL配置JobLaunchingGateway? 干杯,曼诺

  • 我们正在处理一个Spring批处理项目(Spring Boot1.2.2.Release),要求使用Spring SFTP集成以一定频率轮询从服务器位置读取文件。我们使用java config实现了Spring批处理,并在使用Spring Integration java config的过程中实现了Spring批处理。我找不到描述上述情况的例子。我浏览了各种链接,但看到的主要是XML配置示例。 h

  • 我正在用SpringBoot配置Consor,并在这里找到了一个文档。即使浏览了其他资源,也没有找到其他配置或场景。 因此,我很好奇当springboot应用程序与consul集成时是否只有这些配置可用。我想深入了解,有人能让我知道任何其他可用的属性吗?

  • 我正在使用Spring批处理设置一个作业服务器。我的JdbcCursorItemReader需要配置sql,该sql在每个作业运行的基础上进行更改。因为sql发生了变化,所以我希望阅读器具有@stepscope,这样我就不需要担心sql的状态性了。 所以我设置了这样一个类: 我在整个服务器上使用基于Java的配置。ItemReader的一个实例的bean如下所示: 启动服务器并运行Spring批处

  • 我的Spring Batch存储库(部署在Oracle数据库上)位于不同的模式中,因此我需要在模式名称之前添加。 使用XML配置时,这很容易做到: 但是,当我使用JavaConfig时,这变得更加棘手。我发现的最佳解决方案是让我的JavaConfig类并覆盖方法: 与XML解决方案相比,这相当多的代码!这也不太符合逻辑——我的第一个猜测是提供一个< code>@Bean方法,如下所示: 但这没用。