我正在尝试安排方法调用。我想在服务器启动后立即安排此方法调用,然后每 30 秒调用一次。
以下代码:
@Configuration
@EnableScheduling
@EnableTransactionManagement
public class Schedular implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(poolScheduler());
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
testScheduling();
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
Calendar nextExecutionTime = Calendar.getInstance();
nextExecutionTime.add(Calendar.SECOND, <some value from database>);
return nextExecutionTime.getTime();
}
});
}
@Bean
public TaskScheduler poolScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setThreadNamePrefix("poolScheduler");
scheduler.setPoolSize(10);
return scheduler;
}
public void testScheduling(){
System.out.println("Scheduling Testing");
}
}
下面的代码在服务器启动后 30 秒(而不是在服务器启动后)安排方法代码。我知道我需要做一些其他配置来安排方法调用在服务器启动后然后每 30 秒(或任何我想要的时间)之后。
我正在使用弹簧靴。有谁可以推荐一下吗?
另外,是否可以从数据库中获取初始值和固定延迟/固定速率值。我也想从数据库设置初始值
提前致谢。
让我知道这是否对你有用
@PostConstruct
@Scheduled(fixedDelay=30000)
public void testScheduling(){
System.out.println("Scheduling Testing");
}
使用@PostConstuct注解在应用程序启动后启动该方法。
您可以像下面这样使用。我使用过 Spring Boot 版本 v2.2.7
@Scheduled(fixedRateString = "${echo.interval(milliseconds)}", initialDelayString = "${echo.initialDelay(milliseconds)}")
应在“application.properties”文件中提及这些属性,以便 Spring Boot 检测固定速率和初始延迟的值并将其注入调度程序。