我需要实现两个不同的工作,并选择其中一个我想要运行,但我目前不能,它给了我以下错误:
JobInvokerController中的字段processJob需要一个bean,但是找到了2个: - procesaClientesJob:由类路径资源[batchConfig.class]中的'procesaClientesJob'方法定义 - procesaParcialClientesJob:由类路径资源中的'procesaParcialClientesJob'方法定义[BatchConfig.class]
动作:
考虑将其中一个bean标记为@Primary,更新使用者以接受多个bean,或使用@Qualifier标识应该使用的bean
我的BatchConfig.java就像:
[...]
@Bean
Job procesaClientesJob(JobBuilderFactory jobBuilderFactory,
@Qualifier("flowCargaIdsClientes") Flow flowCargaIdsClientes,
@Qualifier("flowCargaDatosClientes") Flow flowCargaDatosClientes,
@Qualifier("flowCargaParcialIdsClientes") Flow flowCargaParcialIdsClientes,
@Qualifier("flowCargaParcialDatosClientes") Flow flowCargaParcialDatosClientes
) {
return jobBuilderFactory.get("procesaClientesJob")
.incrementer(new RunIdIncrementer())
.start(flowCargaIdsClientes).next(flowCargaDatosClientes).end()
.build();
}
@Bean
Job procesaParcialClientesJob(JobBuilderFactory jobBuilderFactory,
@Qualifier("flowCargaParcialIdsClientes") Flow flowCargaParcialIdsClientes,
@Qualifier("flowCargaParcialDatosClientes") Flow flowCargaParcialDatosClientes
) {
return jobBuilderFactory.get("procesaClientesJob")
.incrementer(new RunIdIncrementer())
.start(flowCargaParcialIdsClientes).next(flowCargaParcialDatosClientes).end()
.build();
}
我的类JobInvokeController.java就像:
@RestController
public class JobInvokerController {
private static final Logger log = Logger.getLogger(JobInvokerController.class);
@Autowired
JobLauncher jobLauncher;
@Autowired
Job processJob;
@GetMapping("/invokejob/{strFecha}")
public String invokejob(@PathVariable String strFecha) throws Exception {
Date fecha;
if (log.isDebugEnabled()) {
log.debug("Procesamos el parámetro de entrada " + strFecha);
}
try {
if (!StringUtils.isEmpty(strFecha)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
fecha = sdf.parse(strFecha);
} else {
fecha = new Date();
}
} catch (Exception e) {
fecha = new Date();
}
if (log.isDebugEnabled()) {
log.debug("Invocamos al batch con la fecha: " + fecha);
}
JobParameters jobParameters = new JobParametersBuilder().addLong("time",System.currentTimeMillis()).addDate("fecha", fecha).toJobParameters();
jobLauncher.run(processJob, jobParameters);
return "Batch job has been invoked";
}
}
我还有一个SpringBatchApplication.java:
@SpringBootApplication
public class SpringBatchApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchApplication.class, args);
}
}
如何同时拥有两个作业并选择我想要的作业?
答案 0 :(得分:1)
您希望何时选择要运行的作业?
如果是在应用程序启动之前,我建议使用配置文件,然后激活您要运行的作业的配置文件(-Dspring.profiles.active=job1
)
或者,如果您想在运行期间选择,那么只需@Autowire您的两个工作就可以使用如下所述的限定符:Spring @Autowired and @Qualifier