【问题标题】:java - How to send Http POST request at every two minutes using JAX-RS?java - 如何使用 JAX-RS 每两分钟发送一次 Http POST 请求?
【发布时间】:2016-09-26 10:49:04
【问题描述】:

我正在开发服务器端 Web 服务代码。我正在使用 JAX-RS 作为开发框架。

到目前为止,我已经创建了模型类和资源类来响应客户端请求的数据。

示例资源方法...

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

基本上,服务器响应数据或做一些操作取决于客户端调用的URI。

我想从服务器启动的那一刻起每两分钟向第三方服务器发出一次 Http POST 请求。但我不知道我应该在哪里编写该代码(正如我所说,方法执行取决于被调用的 URI)。

那么,服务器启动时开始执行,服务器停止时结束的代码应该写在哪里。

如何每隔两分钟发送一次Http请求?

【问题讨论】:

    标签: java eclipse web-services jax-rs


    【解决方案1】:

    您应该能够结合使用 Quartz 和 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>
    

    或者如果您使用的是 servlet 容器 3.x,则可以通过使用 @WebListener 注释侦听器类来跳过 web.xml 修改

    【讨论】:

    • 你能解释一下 .withIdentity() 方法的参数吗? (例如“exampleJob”等)
    • .withIdentity() 方法表示作业密钥。作业的名称和作业的组。它在涉及许多工作的项目中很有帮助。 Quartz 文档:quartz-scheduler.org/api/2.2.1/org/quartz/…, java.lang.String)
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多