Chamar um método depois de aplicativos começa Primavera Bota

Sumit:

Tenho uma aplicação Java Primavera de inicialização que tem um Scheduler que exige uma tarefa assíncrona de um Serviço A tarefa leva alguns minutos (geralmente 3-5mins) para completar.

O mesmo método assíncrono do serviço também pode ser chamado através de um aplicativo de interface do usuário, chamando a API do Bota Controlador de Primavera.

Código:

Agendador

@Component
public class ScheduledTasks {
  @Autowired
  private MyService myService;

  @Scheduled(cron = "0 0 */1 * * ?")
  public void scheduleAsyncTask() {
    myService.doAsync();
  }
}

Serviço

@Service
public class MyService {
  @Async("threadTaskExecutor")
  public void doAsync() {
    //Do Stuff
  }
}

Controlador

@CrossOrigin
@RestController
@RequestMapping("/mysrv")
public class MyController {
  @Autowired
  private MyService myService;

  @CrossOrigin
  @RequestMapping(value = "/", method = RequestMethod.POST)
  public void postAsyncUpdate() {
    myService.doAsync();
  }
}

O planejador executa a tarefa assíncrona a cada hora, mas o usuário também pode executá-lo manualmente a partir da interface do usuário.

Mas, eu não quero o método assíncrono para executar novamente se ele já está no meio da execução.

A fim de fazer isso, eu criei uma tabela no DB que contém uma bandeira que acontece quando o método está em execução e, em seguida, ela é desligada depois da conclusão do método.

Algo como este em minha classe de serviço:

@Autowired
private MyDbRepo myDbRepo;

@Async("threadTaskExecutor")
public void doAsync() {
  if (!myDbRepo.isRunning()) {
    myDbRepo.setIsRunning(true);
    //Do Stuff
    myDbRepo.setIsRunning(false);
  } else {
    LOG.info("The Async task is already running");
  }
}

Agora, o problema é que a bandeira às vezes fica preso devido a várias razões (app reinício, algum outro erro de aplicação etc.)

Então, eu quero redefinir a bandeira no DB cada vez que o aplicativo de inicialização primavera é implantado e quando é reiniciado.

Como eu posso fazer isso? Existe alguma maneira de executar um método pouco depois do início da Primavera aplicativo de inicialização, de onde eu posso chamar um método de minha Repo para un definir os sinalizadores no banco de dados?

John M:

Verifique a @PostConstruct para, por exemplo, aqui https://www.baeldung.com/running-setup-logic-on-startup-in-spring

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=168423&siteId=1
Recomendado
Clasificación