无法在 Spring 引导中计划任务而不将参数传递给@Scheduled注释方法



我希望允许用户在电子商务应用程序中定期订购,例如每周、每两周。我使用了@Scheduled注释,但是,带注释的函数不能接受参数或具有返回值。

这个问题还有其他的替代方案或解决方案吗?

@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());
}

你说的"允许用户定期订购";?据我所知,您希望实现的是用户可以提交订单,订单会定期执行(例如每2周执行一次(。这不一样!

不能在REST端点上使用@Scheduled注释。考虑更改您的体系结构。允许用户在REST端点上保存定期订单:

@PostMapping(value="/periodic-order")
public ResponseEntity<Long> insertPeriodic(@Valid @RequestBody NewPeriodicOrderDTO newOrderDTO){
// calling service layer, which persists this order to database 
}

然后创建一个调度器服务,该服务由@Scheduled注释,并执行您想要的与订单相关的逻辑,有点像这样:

@Service
public class ScheduledOrderExecutorService {
private final OrderService orderService;
public ScheduledOrderExecutorService(OrderService orderService) {
this.orderService = orderService;
}
@Scheduled(fixedRate = 20000)
public void executePeriodicOrder() {
// retrieveing corresponding orders via orderService, and implementing related business logic
}
}

最新更新