在java中,在月初启动方法

在java中,在月初启动方法,java,date,timer,future,schedule,Java,Date,Timer,Future,Schedule,对于一个学校项目,我必须计算一个购物袋的“热门商品”,这是当月最受欢迎的商品。 但是我不知道如何在每个月的第一天调用getHotItem方法。 我已经做了一些研究,发现了计时器和ScheduleExpression,但据我所知,它主要用于固定的时间间隔,而不是30或31天的月份 有没有办法在未来的某个特定日期每月1日调用此方法 谢谢避免在servlet中使用计时器类 如果在web应用程序环境中运行,请不要使用Timer类。搜索StackOverflow以了解原因 调度表达式 根据,可以为第一个月

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

有没有办法在未来的某个特定日期每月1日调用此方法

谢谢

避免在servlet中使用计时器类 如果在web应用程序环境中运行,请不要使用Timer类。搜索StackOverflow以了解原因

调度表达式 根据,可以为第一个月设置ScheduleExpression。看起来该类需要一个EJB容器。EJB对于包括我和我的工作在内的许多人来说都是多余的,所以我不熟悉这个类

ScheduledExecutorService 另一个没有完整EJB和JavaEE的路由是类/接口的Executor系列。看。特别是看看这个

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

请务必阅读文档并搜索StackOverflow以了解更多信息。一个技巧是,您的计划代码不能抛出任何异常,否则ScheduledExecutorService会自动停止。因此,在代码周围放一个try-catch

对于web应用环境,Servlets only、Java EE web Profile或完整Java EE使用ServletContextListener在运行时检测web应用何时启动,从而启动ScheduledExecutorService。同样,您也可以关机。同样,搜索StackOverflow,因为前面已经讨论过

每日检查 你可以试着计算到下个月的第一个月的时间,但为什么要麻烦呢?对今天的日期进行快速检查实际上不会对服务器产生任何影响,并且会使代码更加简单,并避免由于计算错误而可能出现的错误。这是对现实世界的建议;也许你作业的目的是计算日期


另一个现实世界的提示:避免使用java.util.Date/.Calendar类,因为它们是出了名的麻烦、混乱和缺陷。取而代之的是使用Joda Time库或java.Time软件包,该软件包由Joda Time设计,内置于java 8中。

制作一个在启动时运行的java程序,检查新日期,查看日期是否等于1,然后进行计算。快乐编码:-Charlie可能不必要的提示:存储最后处理的日期。否则,你可能会出现一些故障,要么跳过一个月,要么做两次。