我需要实现Spring流程,该流程检查数据库表中是否有新行并进行计算。我正在考虑实现每10分钟触发一次的无限循环。
是否有某种方式可以通过Spring Boot来实现?我总是可以使用Java Thread,但是可以肯定的是让Spring管理它更好。
答案 0 :(得分:5)
您可以尝试使用Spring Schedule
这里是官方example
从技术上讲,您可以使用@EnableScheduling
启用计划,并使用@Scheduled(fixedRate=600000)
注释任务。
另一个config可以用来调整计划程序:
fixedRate
:在两次调用之间以毫秒为单位的固定周期执行带注释的方法。
fixedDelay
:在上一次调用的结束与下一次调用的开始之间以毫秒为单位的固定时间执行带注释的方法。
cron
:类似于cron的表达式,扩展了通常的UN * X定义,使其包括秒,分,时,月,日和星期几的触发器。
答案 1 :(得分:1)
找到以下示例代码
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class AppScheduler {
@Scheduled(fixedRate = 10000)
public void myScheduler() {
System.out.println("Test print");
}
}
答案 2 :(得分:1)
这个问题看起来很老,但我想回答。 看,您可以创建ThreadPoolTaskExecutor对象,并为其分配后台进程。 如果有人想看,这是我的详细代码。
https://github.com/xbox2204/SpringBoot-JPA-Swagger-Angular
首先要做的是,在应用程序入门类中添加这两个注释。
@EnableAsync
@EnableScheduling
现在,在相同的类中创建TaskExceutor并使用名称将其分配给bean,以便可以在应用程序中的任何位置创建后台任务并将其附加到该bean。
@Bean(name="thPlExectr")
public Executor getExecutor(){
return new ThreadPoolTaskExecutor();
}
现在在项目中的某个地方创建一个组件类,您将在其中创建后台任务。 在这里,您将提到希望执行任务的频率。我想每5秒打印一条语句,您可以选择自己的频率并给自己的方法定义。另外,使其异步并附加上面提到的TaskExecutor bean,以免中断应用程序的正常运行。
@Component
public class BackgroundTasks {
private static final Logger log= LoggerFactory.getLogger(BackgroundTasks.class);
@Async("thPlExectr")
@Scheduled(fixedRate = 5000)
public void backTask(){
log.info("Hi Vineet! I am a background task");
}
}