JobConfiguration.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.huaxu.zoniot.config;
  2. import com.huaxu.zoniot.common.CommonFileItemReader;
  3. import com.huaxu.zoniot.common.CommonMybatisItemWriter;
  4. import com.huaxu.zoniot.common.Constants;
  5. import com.huaxu.zoniot.common.ServiceException;
  6. import com.huaxu.zoniot.dto.WaterMigrateFileItemDto;
  7. import com.huaxu.zoniot.entity.WaterMeter;
  8. import com.huaxu.zoniot.entity.WaterMigrateFileItem;
  9. import com.huaxu.zoniot.listener.MigrateJobListener;
  10. import com.huaxu.zoniot.listener.MigrateJobSkipListener;
  11. import com.huaxu.zoniot.processor.MigrateFileItemProcessor;
  12. import com.huaxu.zoniot.writer.WaterMeterWriter;
  13. import org.apache.ibatis.session.SqlSessionFactory;
  14. import org.springframework.batch.core.*;
  15. import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
  16. import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
  17. import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
  18. import org.springframework.batch.core.configuration.annotation.StepScope;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.context.annotation.Bean;
  22. import org.springframework.context.annotation.Configuration;
  23. import org.springframework.core.task.SimpleAsyncTaskExecutor;
  24. import org.springframework.core.task.TaskExecutor;
  25. import java.util.Map;
  26. /**
  27. * <p></p>
  28. *
  29. * @Author wilian.peng
  30. * @Date 2021/1/12 18:24
  31. * @Version 1.0
  32. */
  33. @Configuration
  34. @EnableBatchProcessing
  35. public class JobConfiguration implements StepExecutionListener {
  36. @Autowired
  37. private JobBuilderFactory jobBuilderFactory;
  38. @Autowired
  39. private StepBuilderFactory stepBuilderFactory;
  40. @Autowired
  41. private SqlSessionFactory sqlSessionFactory;
  42. @Autowired
  43. private MigrateFileItemProcessor migrateFileItemProcessor;
  44. @Autowired
  45. private MigrateJobSkipListener migrateJobSkipListener ;
  46. @Autowired
  47. private WaterMeterWriter waterMeterWriter;
  48. @Autowired
  49. private MigrateJobListener migrateJobListener;
  50. @Value("${spring.batch.chunk.size}")
  51. private Integer chunkSize;
  52. Map<String, JobParameter> parameterMap;
  53. @Bean
  54. public Job migrateJob() {
  55. return jobBuilderFactory.get("migrateJob")
  56. .start(waterMeterMigrateStep())
  57. .listener(migrateJobListener)
  58. .build();
  59. }
  60. @Bean
  61. public Step waterMeterMigrateStep() {
  62. return stepBuilderFactory.get("waterMeterMigrateStep")
  63. .listener(this)
  64. .<WaterMigrateFileItem, WaterMeter>chunk(chunkSize)
  65. .reader(migrateFileItemItemReader())
  66. .processor(migrateFileItemProcessor)
  67. .writer(waterMeterWriter)
  68. .faultTolerant()
  69. .skip(ServiceException.class)
  70. .skipLimit(Integer.MAX_VALUE)
  71. .listener(migrateJobSkipListener)
  72. .taskExecutor(taskExecutor())
  73. .throttleLimit(8)
  74. .build();
  75. }
  76. @Bean
  77. public TaskExecutor taskExecutor(){
  78. return new SimpleAsyncTaskExecutor("spring_batch");
  79. }
  80. @Bean
  81. @StepScope
  82. public CommonFileItemReader<WaterMigrateFileItemDto> migrateFileItemItemReader() {
  83. String filePath = parameterMap.get(Constants.FILE_FULL_PATH_TAG).getValue().toString();
  84. return new CommonFileItemReader<>(WaterMigrateFileItemDto.class,filePath);
  85. }
  86. @Override
  87. public void beforeStep(StepExecution stepExecution) {
  88. parameterMap = stepExecution.getJobParameters().getParameters();
  89. }
  90. @Override
  91. public ExitStatus afterStep(StepExecution stepExecution) {
  92. return null;
  93. }
  94. }