首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >方法在本月初的java中开始。

方法在本月初的java中开始。
EN

Stack Overflow用户
提问于 2014-11-17 15:45:35
回答 1查看 753关注 0票数 0

对于一个学校项目,我必须计算购物袋的“hotItem”(这是那个月最受欢迎的商品)。但是我不知道如何在每个月的第一天调用这个方法(getHotItem)。我已经做了一些研究,并发现了关于Timer和ScheduleExpressions的知识,但据我了解,它主要用于固定的时间间隔(而不是30或31天的月份)。

是否有一种方法可以在将来的某个特定日期(每月1次)调用此方法?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-11-17 17:15:37

避免Servlets中的Timer

如果在web应用程序环境中运行,那么而不是使用计时器类。搜索StackOverflow来了解原因。

ScheduleExpression

根据Oracle教程的说法,ScheduleExpression可以设置为最初的几个月。看起来这个类需要一个EJB容器。EJB对包括我和我的工作在内的许多人来说都是过分的浪费,所以我不熟悉这个类。

ScheduledExecutorService

另一种没有完整EJB和Java的方法是类/接口的执行器系列。见教程。特别是看看ScheduledExecutorService

我会安排它每天,让任务检查的当前日期。如果不是这个月的第一天,什么也不做,这个任务就完成了。明天,一项新任务将再次检查日期,以此类推。

一定要阅读文档并搜索StackOverflow以了解更多内容。一个诀窍是,您的计划代码不能抛出任何异常,否则ScheduledExecutorService将静默停止。所以在你的代码周围放一个尝试捕捉。

对于web应用程序环境( Servlets或Java或完整Java ),使用ServletContextListener在运行时检测Web应用程序启动时的情况,因此启动ScheduledExecutorService。同样,你也可以关机。同样,搜索StackOverflow,因为这之前已经讨论过了。

支票日报

你可以试着计算到下个月的第一个月的时间,但为什么要费心呢?快速检查今天的日期对您的服务器几乎没有任何影响,使您的代码更简单,并避免由于您的错误计算而可能出现的错误。这是对现实世界的建议,也许你的家庭作业的目标是计算日期。

另一个真实的提示:避免java.util.Date/..Calendar类,因为它们是众所周知的麻烦、混乱和缺陷。相反,可以使用Joda-Time库或者内置到Java8中的java.time包(灵感来自于Joda-Time)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26976386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档