将 SpEL 输出转换为 long 以用作注释参数

convert SpEL output to long to use as an annotation argument

目前,我可以使用 SpEL 的字符串参数,如下所示:

@Autowired
private ParameterService parameterService;

@Scheduled(cron = "#{parameterService.findByCode('cron')}")

它工作正常,但如果我想要一个长常量,它将无法工作:

@Autowired
private ParameterService parameterService;

@Scheduled(fixedDelay = "#{parameterService.findByCode('fixedDelay')}")
//error: incompatible types: String cannot be converted to long

@Scheduled(fixedDelay = Long.parseLong("#{parameterService.findByCode('fixedDelay')}"))
//error: element value must be a constant expression

那么,如何解决?

另外,我不能给 Long,它只接受 long

编辑:

我遇到过很多类似的SpEL问题,但是没有适用于我的案例的解决方案。

您可以使用fixedDelayString with spring expression language

@Scheduled(fixedDelayString = "#{parameterService.findByCode('fixedDelay')}")

改用fixedDelayString

@Scheduled(fixedDelayString = "#{parameterService.findByCode('fixedDelay')}"))