gpt4 book ai didi

java - 拥有多项工作并选择我想在 Spring 中运行的一项

转载 作者:行者123 更新时间:2023-12-02 11:56:24 24 4
gpt4 key购买 nike

我需要实现两个不同的作业,并选择我想要运行其中的一个,但我目前不能,它给了我以下错误:

Field processJob in JobInvokerController required a single bean, but 2 were found:

  • procesaClientesJob: defined by method 'procesaClientesJob' in class path resource [BatchConfig.class]
  • procesaParcialClientesJob: defined by method 'procesaParcialClientesJob' in class path resource [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);
}
}

我怎样才能同时拥有两个作业并选择我想要运行的作业?

最佳答案

您想什么时候选择您想要运行的工作?如果是在应用程序启动之前,我建议使用配置文件,然后激活要运行的作业的配置文件 (-Dspring.profiles.active=job1)或者,如果您想在运行时进行选择,那么只需@Autowire 您的两个作业就可以使用如下所述的限定符:Spring @Autowired and @Qualifier

关于java - 拥有多项工作并选择我想在 Spring 中运行的一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47573521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com