class Job2Configuration {

	private final Random random;

	public Job2Configuration() {
		this.random = new Random();
	}

	@Bean
	public Job job2(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
		return new JobBuilder("job2", jobRepository).start(step(jobRepository, transactionManager)).build();
	}

	@Bean
	public Step step(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
		return new StepBuilder("step1", jobRepository).<Integer, Integer>chunk(3, transactionManager)
			.reader(itemReader())
			.writer(itemWriter())
			.build();
	}

	@Bean
	@StepScope
	public ListItemReader<Integer> itemReader() {<FILL_FUNCTION_BODY>}

	@Bean
	public ItemWriter<Integer> itemWriter() {
		return items -> {
			for (Integer item : items) {
				int nextInt = random.nextInt(1000);
				Thread.sleep(nextInt);
				// simulate write failure
				if (nextInt % 57 == 0) {
					throw new Exception("Boom!");
				}
				System.out.println("item = " + item);
			}
		};
	}

}

		List<Integer> items = new LinkedList<>();
		// read a random number of items in each run
		for (int i = 0; i < random.nextInt(100); i++) {
			items.add(i);
		}
		return new ListItemReader<>(items);
	
<no_super_class>