首页 文章

如何为spring批处理配置spring数据流

提问于
浏览
2

我有 Spring 季批量项目我想在Spring Cloud 数据流上配置它我可以在SCDF上注册但是在启动任务时我的工作没有运行以下是我的配置文件

@SpringBootApplication
@EnableBatchProcessing
@EnableTask
public class BatchApplication {
/*@Autowired
BatchCommandLineRunner batchcommdrunner;

@Bean
public CommandLineRunner commandLineRunner() {
    System.out.println("Executed at :" +  new SimpleDateFormat().format(new Date()));
    return batchcommdrunner ;
}*/

public static void main(String[] args) {
    SpringApplication.run(BatchApplication.class, args);
}
}

这是我的批处理配置文件

@Configuration
public class BatchConfiguaration {

@Autowired
private DataSource datasouce;

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Autowired
public Environment env;

@Bean(name = "reader")
@StepScope
public ItemReader<Schedules> reader(@Value("#{stepExecutionContext[scheduleRecs]}") List<Schedules> scherecs) {
    ItemReader<Schedules> reader = new IteratorItemReader<Schedules>(scherecs);
    return reader;
}

@Bean(name = "CWSreader")
@StepScope
public ItemReader<Contents> CWSreader(@Value("#{stepExecutionContext[scheduleRecs]}") List<Contents> scherecs) {
    ItemReader<Contents> reader = new IteratorItemReader<Contents>(scherecs);
    return reader;
}

@SuppressWarnings("rawtypes")
@Bean
@StepScope
public BatchProcessor processor() {
    return new BatchProcessor();
}

@Bean(name = "batchSchedulePreparedStatement")
@StepScope
public BatchSchedulePreparedStatement batchSchedulePreparedStatement() {
    return new BatchSchedulePreparedStatement();
}


@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean(name = "batchWriter")
@StepScope
public BatchWriter batchWriter() {
    BatchWriter batchWriter = new BatchWriter();
    batchWriter.setDataSource(datasouce);
    batchWriter.setSql(env.getProperty("batch.insert.schedule.query"));
    batchWriter.setItemPreparedStatementSetter(batchSchedulePreparedStatement());
    return batchWriter;

}


@Bean("acheronDbTm")
@Qualifier("acheronDbTm")
public PlatformTransactionManager platformTransactionManager() {
    return new ResourcelessTransactionManager();
}

@Bean
public JobExplorer jobExplorer() throws Exception {
    MapJobExplorerFactoryBean explorerFactoryBean = new MapJobExplorerFactoryBean();
    explorerFactoryBean.setRepositoryFactory(mapJobRepositoryFactoryBean());
    explorerFactoryBean.afterPropertiesSet();
    return explorerFactoryBean.getObject();
}

@Bean
public MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean() {
    MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean();
    mapJobRepositoryFactoryBean.setTransactionManager(platformTransactionManager());
    return mapJobRepositoryFactoryBean;
}

@Bean
public JobRepository jobRepository() throws Exception {
    return mapJobRepositoryFactoryBean().getObject();
}

@Bean
public SimpleJobLauncher jobLauncher() throws Exception {
    SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
    jobLauncher.setJobRepository(jobRepository());
    return jobLauncher;
}

@Bean(name = "batchPartition")
@StepScope
public BatchPartition batchPartition() {
    BatchPartition batchPartition = new BatchPartition();
    return batchPartition;
}



@Bean(name="taskExecutor")
public TaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
    poolTaskExecutor.setCorePoolSize(10);
    poolTaskExecutor.setMaxPoolSize(30);
    poolTaskExecutor.setQueueCapacity(35);
    poolTaskExecutor.setThreadNamePrefix("Acheron");
    poolTaskExecutor.afterPropertiesSet();
    return poolTaskExecutor;
}

@Bean(name = "masterStep")
public Step masterStep() {
    return stepBuilderFactory.get("masterStep").partitioner(slave()).partitioner("slave", batchPartition())
            .taskExecutor(taskExecutor()).build();
}


@Bean(name = "slave")
public Step slave() {
    return stepBuilderFactory.get("slave").chunk(100).faultTolerant().retryLimit(2)
            .retry(DeadlockLoserDataAccessException.class).reader(reader(null)).processor(processor())
            .writer(batchWriter()).build();

}


@Bean(name = "manageStagingScheduleMaster")
public Job manageStagingScheduleMaster(final Step masterStep) throws Exception {
    return jobBuilderFactory.get("manageStagingScheduleMaster").preventRestart().incrementer(new RunIdIncrementer())
            .start(masterStep).build();
}

任何人都可以帮助我正确配置它还是有任何其他方式我可以监控我的批处理作业我也尝试过使用Spring启动管理但是它不支持SBA中的java配置有没有办法在xml中添加没有作业的作业

我正在从控制器开始这项工作

JobParametersBuilder builder = new JobParametersBuilder();
    System.out.println("Job Builder " + builder);
    JobParameters jobParameters = builder.toJobParameters();
    JobExecution execution = jobLauncher.run(job, jobParameters);
    return execution.getStatus().toString();

1 回答

  • 0

    这个sample显示了一个基本的Spring批处理应用程序,可以作为Spring Cloud Data Flow中的任务启动 .

相关问题