问题描述
我正在将azure函数与spring boot一起使用,在我的代码中,我有一个带有@Scheduled
批注的方法(fixedDelay = 10秒),我担心在某些情况下它并不总是能很好地工作的确如此,在其他情况下,我遇到了ConcurrentModificationException
之类的异常。
在我的函数中,我有队列触发器,而在我理解的注释中,@Scheduled
下的代码只能在函数处于“执行”状态时触发,而且它需要附加线程,并且从天蓝色方面可能会有一些限制就像每执行一次就有一个线程,等等。
结论是,无服务器功能(如天蓝色)在执行期间不应创建任何其他线程,我的意思是只有一个线程专用于单个功能执行。
请让我知道我的思维方式是否正确,是否应该使用其他解决方案(而不创建其他线程)来处理我的业务逻辑?
解决方法
更好地为您的用例提供用户@TimerTrigger注释,而不是@Scheduled(对于Spring Boot是本机的)。
示例:
@FunctionName(“ keepAlive”) 公共无效的keepAlive( @TimerTrigger(name =“ keepAliveTrigger”,schedule =“ 0 * / 5 * * * *”)字符串timerInfo, ExecutionContext上下文 ){ // timeInfo是JSON字符串,您可以使用自己喜欢的JSON库将其反序列化为对象 context.getLogger()。info(“计时器已触发:” + timerInfo); }