文章目录
JobController
java
@RestController
public class JobController {
@Autowired(required = false)
private JobLauncher msgJobLauncher4;
@Autowired(required = false)
private Job msgJob4;
@RequestMapping("msgJob4")
public String msgJob4() {
try {
JobExecution jobExecution = msgJobLauncher4.run(msgJob4, new JobParametersBuilder()
.addString("time", System.currentTimeMillis() + "")
.toJobParameters());
return "ok";
} catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException |
JobParametersInvalidException e) {
throw new RuntimeException(e);
}
}
@Autowired(required = false)
private JobLauncher msgJobLauncher5;
@Autowired(required = false)
private Job msgJob5;
@RequestMapping("msgJob5")
public String msgJob5(@RequestParam(name = "key", defaultValue = "dft") String key) {
try {
JobExecution jobExecution = msgJobLauncher5.run(msgJob5, new JobParametersBuilder()
.addString("time", System.currentTimeMillis() + "")
.addString("key", key)
.toJobParameters());
return "ok";
} catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException |
JobParametersInvalidException e) {
throw new RuntimeException(e);
}
}
}
ReadFlatFileMsgJobConfig5
java
@Configuration
public class ReadFlatFileMsgJobConfig5 {
@Autowired
private JobRepository jobRepository;
@Autowired
private PlatformTransactionManager txm;
@Autowired
private MsgMapper msgMapper;
@Bean
public JobLauncher msgJobLauncher5() {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository);
return jobLauncher;
}
@Bean
public Job msgJob5() {
return new JobBuilder("msgJob5", jobRepository)
.start(msgStep5())
.build();
}
private Step msgStep5() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(1);
executor.setMaxPoolSize(1);
executor.afterPropertiesSet();
return new StepBuilder("msgStep5", jobRepository)
.<Person, Person>chunk(1, txm)
.reader(msgReader5(null))
.processor(msgProcessor5())
.writer(msgWriter5())
.taskExecutor(executor)
.faultTolerant()
.skip(Exception.class)
.skipLimit(3)
.build();
}
@Bean
@StepScope // 必须声明为ItemStreamReader,否则会报错
public ItemStreamReader<Person> msgReader5(
// 动态获取job的执行参数
@Value("#{jobParameters['key']}") String key
) {
Properties props = new Properties();
String readFileName = "person.txt";
try {
// 动态读取文件中配置的属性名
props.load(new FileReader(System.getProperty("user.dir") + "\\file\\file.properties"));
readFileName = props.getProperty("readFileName");
} catch (IOException e) {
throw new RuntimeException(e);
}
FlatFileItemReader<Person> itemReader = new FlatFileItemReaderBuilder<Person>()
.name("msgReader5")
.resource(new FileSystemResource(new File(System.getProperty("user.dir") + "\\file\\" + readFileName)))
.delimited()
.names("id", "name", "age")
.targetType(Person.class)
.build();
System.out.println("create msgReader5..." + itemReader + "key: " + key);
return itemReader;
}
private ItemProcessor<Person, Person> msgProcessor5() {
return new ItemProcessor<Person, Person>() {
@Override
public Person process(Person item) throws Exception {
System.out.println("processor->" + item);
return item;
}
};
}
private ItemWriter<Person> msgWriter5() {
return new ItemWriter<Person>() {
@Override
public void write(Chunk<? extends Person> chunk) throws Exception {
System.out.println(chunk);
}
};
}
}
WriteFlatFileMsgJobConfig4
java
@Slf4j
@Configuration
public class WriteFlatFileMsgJobConfig4 {
@Autowired
private JobRepository jobRepository;
@Autowired
private PlatformTransactionManager txm;
@Autowired
private MsgMapper msgMapper;
@Bean
public JobLauncher msgJobLauncher4() {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository);
return jobLauncher;
}
@Bean
public Job msgJob4() {
return new JobBuilder("msgJob4", jobRepository)
.start(msgStep4())
.build();
}
private Step msgStep4() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(1);
executor.setMaxPoolSize(1);
executor.afterPropertiesSet();
return new StepBuilder("msgStep4", jobRepository)
.<Person, Person>chunk(1, txm)
.reader(msgReader4())
.processor(msgProcessor4())
.writer(msgWriter4())
.taskExecutor(executor)
.faultTolerant()
.skip(Exception.class)
.skipLimit(3)
.build();
}
@Bean
@StepScope
public ItemReader<Person> msgReader4() {
ItemReader<Person> itemReader = new ItemReader<>() {
private int num = 1;
private static final int DEFAULT_MAX_NUM = 5;
@Override
public Person read() throws Exception {
synchronized (this) {
if (num <= DEFAULT_MAX_NUM) {
Person person = new Person();
person.setId(num);
person.setName("zzhua" + num);
person.setAge(new Random().nextInt(30));
System.out.println(person);
num++;
return person;
}
return null;
}
}
};
System.out.println("create msgReader4...: " + itemReader);
return itemReader;
}
private ItemProcessor<Person, Person> msgProcessor4() {
return new ItemProcessor<Person, Person>() {
@Override
public Person process(Person item) throws Exception {
return item;
}
};
}
private ItemWriter<Person> msgWriter4() {
return new FlatFileItemWriterBuilder<Person>()
.name("msgWriter4")
.delimited()
.names("id", "name", "age")
.resource(new FileSystemResource(new File(System.getProperty("user.dir") + "\\file\\person.txt")))
.build();
}
}
file.properties
properties
readFileName=person.txt