java-как отправлять HTTP POST запрос каждые две минуты с помощью JAX-RS?

Я разрабатываю код веб-служб на стороне сервера. Я использую JAX-RS в качестве платформы разработки.

До сих пор я создал классы модели и класс ресурсов, который отвечает на запрошенные данные клиенту.

Пример метода ресурса…

@GET
@Path("/{userId}")
@Produces(MediaType.APPLICATION_JSON)
public User getUserDetails(@PathParam("userId") long id) {
    ..
    // some code here //
    ..
}

В основном, сервер отвечает на данные или делает некоторые операции, зависит от URI, вызываемого клиентом.

Я хочу сделать запрос Http POST к стороннему серверу каждые две минуты с момента запуска сервера. Но я не знаю, где я должен написать этот код (как я уже сказал, методы выполнения зависят от URI вызывается).

Итак, где я должен написать код, который начинает выполняться при запуске сервера и заканчивается при остановке сервера.

Как отправить Http запрос каждые две минуты ?

1 ответ

  1. Вы должны быть в состоянии сделать это с комбинацией кварца и ServletContextListener.

    Вам нужно будет создать задание, триггер и планировщик, чтобы ваш код выполнялся через каждые две минуты, и класс прослушивателя, который реализует интерфейс ServletContextListener.

    Ваш код будет выглядеть примерно так:

    Класс Работы:

     package com.example;
    
        import org.quartz.Job;
        import org.quartz.JobExecutionContext;
        import org.quartz.JobExecutionException;
    
        public class ExampleJob implements Job
        {
            public void execute(JobExecutionContext context) throws JobExecutionException {
                    // Code to make POST call here
        }
    

    ServletContextListener

    package com.example;
    
    public class ExampleListener implements javax.servlet.ServletContextListener {
    
       public void contextInitialized(ServletContext context) {
          JobDetail job = JobBuilder.newJob(ExampleJob.class)
                .withIdentity("exampleJob", "group").build();
          // Trigger
          Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("exampleTrigger", "group")
                .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(120).repeatForever())
                .build();
          // Scheduler
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);
    
       }
    }
    

    И добавьте это в web.XML:

    <listener>
        <listener-class>com.example.ExampleListener</listener-class>
    </listener>
    

    или если вы используете контейнер сервлета 3.x, вы можете пропустить веб.изменение xml путем аннотирования класса listener с помощью @WebListener