JavaEE 中的 RESTful 定时器
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2800+ 小伙伴加入学习 ,欢迎点击围观
如果您需要自动创建计时器,EJB @Schedule 注释会派上用场。可以使用类似 cron 的表达式来配置适当的计划。如果您需要更大的灵活性,旧的 TimerService 很有用。
快速背景
- TimerService 接口是在 EJB 2.1 中引入的[是的.. J2EE 时代! ;-) ]
- 用于以编程方式创建 Timer 对象
- 用于与 TimedObject 接口 [EJB 3.0 之前] 的实现结合使用,作为定时器触发器的回调
- 从 EJB 3.0 开始, @Timeout 注释用于标记(无状态/单例/消息驱动)bean 中的方法,以充当来自 EBJ 容器的计时器回调的接收者
- EJB 3.1 通过引入 ScheduleExpression 进一步改进了事情,它允许细粒度的定时器调度——这是 @Schedule 的编程等价物
EJB Timer相关组件(供快速参考)
RESTful 定时器
人们可以很容易地公开一个简单的 RESTful 接口来使用 EJB 计时器。创建计时器、获取计时器详细信息以及取消计时器等操作可以即时执行。
通过 这个 Github 项目 可以获得一个简单的实现。这是一个基于 Netbeans 构建的简单 Java EE 7 Maven 项目。您应该能够轻松设置它。
这是一个要点
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response schedule(@HeaderParam("name") final String timerName, final ScheduleConfiguration config) {
auditScheduler.schedule(from(config), new TimerConfig(timerName, config.isPersistent()));
return Response.created(UriBuilder.fromResource(AuditSchedulerResource.class).path(timerName).build(timerName)).build();
}
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response schedule(@HeaderParam("name") final String timerName, final ScheduleConfiguration config) {
auditScheduler.schedule(from(config), new TimerConfig(timerName, config.isPersistent()));
return Response.created(UriBuilder.fromResource(AuditSchedulerResource.class).path(timerName).build(timerName)).build();
}
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response schedule(@HeaderParam("name") final String timerName, final ScheduleConfiguration config) {
auditScheduler.schedule(from(config), new TimerConfig(timerName, config.isPersistent()));
return Response.created(UriBuilder.fromResource(AuditSchedulerResource.class).path(timerName).build(timerName)).build();
}
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response schedule(@HeaderParam("name") final String timerName, final ScheduleConfiguration config) {
auditScheduler.schedule(from(config), new TimerConfig(timerName, config.isPersistent()));
return Response.created(UriBuilder.fromResource(AuditSchedulerResource.class).path(timerName).build(timerName)).build();
}
WADL 应该讲故事