es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede programar una tarea en Spring Boot sin pasar parámetros al método anotado con @Scheduled.

Me gustaría permitir a los usuarios realizar pedidos periódicos en una aplicación de comercio electrónico, por ejemplo, cada semana, cada dos semanas. He utilizado la anotación @Scheduled, sin embargo, la función anotada no puede recibir argumentos ni devolver un valor.

¿Existen otras alternativas o soluciones a este problema?

java
@PostMapping(value="/period")
@Scheduled(fixedRate = 20000)
public ResponseEntity<long> insertPeriodic(@Valid @RequestBody NewOrderDTO newOrderDTO){
Order order = orderService.insert(newOrderDTO);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(order.getId()).toUri();
return ResponseEntity.created(uri).body(order.getId());
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, existen formas alternativas de implementar órdenes periódicas en una aplicación de comercio electrónico. Una solución es utilizar una expresión cron en lugar de la opción fixedRate en la anotación @Scheduled. La expresión cron se puede usar para programar una tarea para que se ejecute en intervalos específicos de tiempo, como cada semana o cada dos semanas.

    Por ejemplo, el siguiente código programará la función insertPeriodic para que se ejecute cada dos semanas los lunes a las 12:00 PM:

    @PostMapping(value="/period")
    @Scheduled(cron = "0 0 12 ? * LUN")
    public ResponseEntity<long> insertPeriodic(@Valid @RequestBody NewOrderDTO newOrderDTO){
        Order order = orderService.insert(newOrderDTO);
        URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(order.getId()).toUri();
        return ResponseEntity.created(uri).body(order.getId());
    }
    

    Otra opción es utilizar un marco de programación separado, como Quartz o Spring Scheduler, que permiten más flexibilidad al programar tareas con argumentos y valores de retorno. Estos marcos se pueden integrar fácilmente con aplicaciones de Spring Boot y ofrecen una amplia gama de opciones de programación.

    “`java
    @Component
    public class MyScheduler {

    @Autowired
    private OrderService orderService;

    @Scheduled(cron = “0 0 12 ? * LUN”)
    public void insertPeriodic() {
    NewOrderDTO newOrderDTO = // crear nueva orden
    Order order = orderService.insert(newOrderDTO);
    // manejar respuesta o realizar otras acciones
    }
    }
    “`

Comments are closed.