具有固定时滞和初始时滞工件的 Spring 排序

dw1jzc5e  于 2023-03-07  发布在  Spring
关注(0)|答案(2)|浏览(102)

我正在尝试安排方法调用。我希望在服务器启动时立即安排此方法调用,然后每隔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秒(或我想的任何时间)。
我用的是 Spring Boot ,有没有人能建议一下。
另外,是否可以从数据库中同时获取初始值和固定延迟/固定速率值。我还想从数据库中设置初始值
先谢了。

nvbavucw

nvbavucw1#

让我知道这是否适合你

@PostConstruct
@Scheduled(fixedDelay=30000)
public void testScheduling(){
     System.out.println("Scheduling Testing");
}

使用@PostConstuct注解在应用程序启动后启动该方法。

t40tm48m

t40tm48m2#

你可以像下面这样使用。我用的是Sping Boot 版本v2.2.7

@Scheduled(fixedRateString = "${echo.interval(milliseconds)}", initialDelayString = "${echo.initialDelay(milliseconds)}")

应在“application.properties”文件中提及这些属性,以便Sping Boot 检测固定速率和初始延迟的值并将其注入调度程序。

相关问题