class JobConfigurationForRunningPartitionedStepsWithVirtualThreads {

	@Bean
	public Step managerStep(JobRepository jobRepository, Step workerStep, Partitioner partitioner) {
		return new StepBuilder("managerStep", jobRepository).partitioner(workerStep.getName(), partitioner)
			.step(workerStep)
			.gridSize(4)
			.taskExecutor(new VirtualThreadTaskExecutor("spring-batch-"))
			.build();
	}

	@Bean
	public Step workerStep(JobRepository jobRepository, JdbcTransactionManager transactionManager, Tasklet tasklet) {
		return new StepBuilder("workerStep", jobRepository).tasklet(tasklet, transactionManager).build();
	}

	@Bean
	@StepScope
	public Tasklet tasklet(@Value("#{stepExecutionContext['data']}") String partitionData) {<FILL_FUNCTION_BODY>}

	@Bean
	public Partitioner partitioner() {
		return gridSize -> {
			Map<String, ExecutionContext> partitionMap = new HashMap<>(gridSize);
			for (int i = 0; i < gridSize; i++) {
				ExecutionContext executionContext = new ExecutionContext();
				executionContext.put("data", "data" + i);
				String key = "partition" + i;
				partitionMap.put(key, executionContext);
			}
			return partitionMap;
		};
	}

	@Bean
	public Job job(JobRepository jobRepository, Step managerStep) {
		return new JobBuilder("job", jobRepository).start(managerStep).build();
	}

}

		return (contribution, chunkContext) -> {
			System.out.println(Thread.currentThread() + ": processing partition " + partitionData);
			return RepeatStatus.FINISHED;
		};
	
<no_super_class>