Web Services 我必须创建一个JavaSpringboot应用程序,在其中必须同时向多个端点发送请求及其预定时间

nwsw7zdq  于 2022-11-15  发布在  Java
关注(0)|答案(1)|浏览(130)

说明-我已将IP地址/端口及其时间频率保存在数据库中。

我必须创建将在计划时间运行服务或作业它将从数据库读取终结点,并同时向每个终结点发送请求
示例数据:

10.20.30.111/8890 and time frequency 5 min
10.30.40.112/6764 and time frequency 2 min

这意味着我必须创建服务,每5分钟向10.20.30.111/8890发送一次请求,每2分钟向10.30.40.112/6764发送一次请求。
如何创建基于不同时间频率运行并同时向多个端点发送请求的服务。

hwazgwia

hwazgwia1#

您可以将一个TaskScheduler注入到应用程序的配置类中,假设所有与时间表相关的记录(端点,频率)都已经(或可以)从数据库中读取,您可以将这些记录中的每一个转换为对TaskScheduler.scheduleAtFixedRate的调用(将频率转换为Duration类型的间隔)。
例如, backbone 可以是:

@Configuration
@EnableScheduling
public class Question72238004Config
{
    // represents the database repository for tasks FooTask
    @Autowired 
    FooTaskRepository fooTaskRepository;
    
    @Bean
    public TaskScheduler taskScheduler() {
        final ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        // configure task scheduler ...
        scheduler.setPoolSize(2);
        return scheduler;
    }
    
    @PostConstruct
    void setup()
    {
        final TaskScheduler scheduler = this.taskScheduler();
        // Read records of (endpoint,freq) from fooTaskRepository
        for (FooTaskEntity t: fooTaskRepository.findAll()) {
            // extract endpoint from t, build a Runnable from it
            Runnable r = ... ;
            // extract frequency and transform to Duration
            Duration d = Duration.ofMinutes(...);
            // Schedule
            scheduler.scheduleAtFixedRate(r, d);
        }
    }
}

相关问题